我通过将图像转换为NSData来计算图像大小,其数据长度得到了错误的值。
NSData *data = UIImageJPEGRepresentation(image,0.5);
NSLog(@"image size in bytes %lu",(unsigned long)data.length);
实际上,UIImage。这里的length函数没有返回错误的值,它只是从UIImage到NSData的有损转换/还原的结果。
在UIImageJpegRepresentation中将compressionQuality设置为最低压缩值1.0将不会返回原始图像。尽管在此过程中剥离了图像元数据,但该函数可以并且通常会生成比原始对象更大的对象。注意,增大文件大小并不会使提高原始压缩图像的质量。jpeg一开始就被高度压缩,这就是为什么它们被如此频繁地使用,这个函数是先解压,然后再重新压缩。这有点像年纪大了之后打肉毒杆菌,你的身体舒展了,看起来和原来的样子差不多,但里面的东西却不像以前那么好了。
对于较大的文件,您可以有条件地使用较低的压缩质量,接近1.0,因为质量会迅速下降。除此之外,根据图像的最终用途,唯一的其他选择是调整图像大小或调整其分辨率,可能还要调整压缩比。这一变化将以指数方式减少数据使用。Web和移动应用通常不需要像数字打印图像那样的分辨率。
你可以编写一些代码来调整每个图像和NSData表示,只要需要适合其单独的数据约束。