我通过将图像转换为NSData并且其数据长度值错误来计算图像大小(以字节为单位)。
NSData *data = UIImageJPEGRepresentation(image,0.5);
NSLog(@"image size in bytes %lu",(unsigned long)data.length);
答案 0 :(得分:1)
实际上,这里的UIImage.length函数没有返回错误的值,它只是从UIImage到NSData的有损转换/反转的结果。
在UIImageJpegRepresentation中将compressionQuality设置为1.0的最低压缩率将不会返回原始图像。虽然在此过程中剥离了图像元数据,但该函数可以并且通常会产生大于原始对象的对象。请注意,文件大小的增加确实 NOT 会提高压缩原始图像的质量。 Jpegs一开始就是高度压缩的,这就是为什么它们经常被使用的原因,并且函数是解压缩它然后重新压缩它。它有点像年龄后的肉毒杆菌使你的身体伸展,它可能看起来与原来相似,但内部不像以前那么好。
您可以在较大的文件上有条件地使用较低的compressionQuality,接近1.0,因为质量会迅速下降。除此之外,根据图像的最终目的,唯一的另一种选择是调整图像大小或调整其分辨率,可能除了调整压缩比之外。此更改将以指数方式减少数据使用量。网络和移动设备的使用通常不需要分辨率,就像用于数字打印的图像一样。
您可以编写一些代码,仅根据需要调整每个图像和NSData表示以适应其各自的数据约束。