用UIImageJPEGRepresentation()压缩的图像的NSData长度

时间:2013-02-24 16:48:49

标签: ios uiimage nsdata

我们知道可以使用方法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

我感到困惑的是,lengthimgData的{​​{1}}为何不同。在我的应用程序中,图像应上传到服务器。我应该将imgData2上传到服务器以节省存储空间吗? Android手机是否可以下载NSData并将其转换为图片?任何帮助将不胜感激!

2 个答案:

答案 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。