压缩UIImage至特定大小(以兆字节为单位)

7
obj-с 中,如何获取存储在自定义的 NSMutableArray 中的某个 UIImage 的大小?这是我想做的第一件事。其次,如果已知图像的文件大小(假设为15 MB)大于我的文件大小限制(假设为5 MB),如何将图像压缩到最接近文件大小限制,例如4.99 MB?

1
压缩算法无法被编写成将每个文件压缩到特定大小的算法,并且根据给定的参数,任何压缩框架的估计可能会出现天文数字般的错误。唯一准确的方法是先进行压缩,然后再提问。文件大小是一个可以轻松获取的属性。 - CodaFi
您可以通过UIImage的NSData表示和NSData类实例方法-[NSData length]来检查UIImage的大小。https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSData_Class/Reference/Reference.html#//apple_ref/occ/instm/NSData/length. - art-divin
1个回答

16

我在stackoverflow的另一个问题上看到过这个链接 -- 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);
}

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

我知道这不是非常有效,但我不相信有一个单一的调用可以实现特定大小的图像。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接