我通过将图像转换为 NSData 来计算图像大小(以字节为单位),并且它的数据长度得到了错误的值。
NSData *data = UIImageJPEGRepresentation(image,0.5);
NSLog(@"image size in bytes %lu",(unsigned long)data.length);
我通过将图像转换为 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 一开始就被高度压缩,这就是它们经常使用的原因,并且功能是将其解压缩然后重新压缩。有点像年纪大了之后打肉毒杆菌,把你的身体拉长了,它可能看起来和原来的很像,但内部却不如以前那么好了。
您可以有条件地对较大的文件使用较低的 compressionQuality,接近 1.0,因为质量会迅速下降。除此之外,根据图像的最终目的,唯一的其他选择是调整图像大小或调整其分辨率,也许除了调整压缩率之外。这种变化将成倍减少数据使用量。Web 和移动设备的使用通常不需要像用于数字打印的图像那样的分辨率。
您可以编写一些代码,仅根据需要调整每个图像和 NSData 表示以适应其单独的数据约束。