我们知道可以使用方法UIImageJPEGRepresentation()
压缩图像,如以下代码所示。
NSData *imgData = UIImageJPEGRepresentation(imageResized, 0.5);
NSLog(@"imgData.length :%d",imgData.length);
imageResized = [UIImage imageWithData:imgData];
NSData *imgData2 = UIImageJPEGRepresentation(imageResized, 1);
NSLog(@"imgData2.length :%d",imgData2.length);
日志是:
2013-02-25 00:33:14.756 MyApp[1119:440b] imgData.length :371155
2013-02-25 00:33:20.988 MyApp[1119:440b] imgData2.length :1308415
我感到困惑的是,length
和imgData
的{{1}}为何不同。在我的应用程序中,图像应上传到服务器。我应该将imgData2
上传到服务器以节省存储空间吗? Android手机是否可以下载NSData
并将其转换为图片?任何帮助将不胜感激!
答案 0 :(得分:13)
您从某个大小的UIImage
开始(比如1024x768)。内存中需要1024x768x4个字节。然后用0.5倍压缩它,得到371,155字节。
然后使用压缩数据创建新的UIImage
。这仍然是1024x768(或其他)UIImage
,因此它现在需要与原始图像相同的内存量(1024x768x4)。然后,将其转换为压缩程度较低的新JPG,为您提供1,308,415字节。
即使您创建了压缩图像的未压缩版本,字节数也来自转换完整大小的UIImage
。第二个未压缩的图像虽然更大,但仍然具有相同的低质量压缩图像。
由于您的数据代表JPG,因此下载数据的任何内容都可以将数据视为JPG,包括Android手机。
答案 1 :(得分:3)
第二个图像的字节数更大,因为您将更高的压缩质量值传递给UIImageJPEGRepresentation
。更高的质量需要更多的字节
一旦上传到服务器的文件将是标准的JPEG文件,任何设备都可以查看,包括Android。