3

我们知道可以使用方法压缩图像,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

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

4

2 回答 2

13

你从UIImage某个大小(比如 1024x768)开始。这需要 1024x768x4 字节的内存。然后将其压缩为 0.5 倍,得到 371,155 字节。

UIImage然后,您使用压缩数据创建一个新的。这仍然是 1024x768(或其他)UIImage,因此它现在占用与原始图像相同的内存量(1024x768x4)。然后将其转换为压缩较少的新 JPG,为您提供 1,308,415 字节。

即使您创建了压缩图像的未压缩版本,字节数也来自转换完整大小的UIImage. 第二张未压缩的图像虽然更大,但仍将具有与压缩图像相同的较低质量。

由于您的数据代表 JPG,因此下载数据的任何内容都可以将数据视为 JPG,包括 Android 手机。

于 2013-02-24T17:04:52.390 回答
3

第二个图像的字节数更大,因为您将更高的压缩质量值传递给UIImageJPEGRepresentation. 更高的质量需要更多的字节。

上传到服务器后的文件将是标准的 JPEG 文件,任何设备都可以查看,包括 Android。

于 2013-02-24T16:56:19.260 回答