将UIImage压缩到某个大小(以兆字节为单位)

时间:2013-09-19 15:34:32

标签: iphone objective-c cocoa-touch uiimage inversion-of-control

obj-с中,如何获得存储在自定义UIImage中的某个NSMutableArray的大小?这是我想要做的第一件事。第二个是,知道图像的文件大小(比如15 MB)比我自己的文件大小限制(比如它的5 MB)更大,如何压缩图像最接近文件大小限制,比如4.99 MB?

1 个答案:

答案 0 :(得分:15)

我在stacj溢出链接的另一个问题上看到了这个 - image compression by size - iPhone SDK

但我确实从那里结合了两个答案,我也使用此代码进行压缩。

CGFloat compression = 0.9f;
CGFloat maxCompression = 0.1f;
int maxFileSize = 250*1024;

NSData *imageData = UIImageJPEGRepresentation(yourImage, compression);

while ([imageData length] > maxFileSize && compression > maxCompression)
{
    compression -= 0.1;
    imageData = UIImageJPEGRepresentation(yourImage, compression);
}

一种方法是在循环中重新压缩文件,直到找到所需的大小。你可以先找到高度和宽度,并猜测压缩系数(更大的图像更多的压缩),然后压缩后,检查大小,然后再次分割差异。

我知道这不是超级高效,但我不相信只有一个电话来实现特定尺寸的图像。