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

lu *_*uan 3 uiimage nsdata ios

我们知道可以使用方法压缩图像,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);
Run Code Online (Sandbox Code Playgroud)

日志是:

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
Run Code Online (Sandbox Code Playgroud)

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

rma*_*ddy 13

你从UIImage一些大小(比如1024x768)开始.内存中需要1024x768x4个字节.然后用0.5倍压缩它,得到371,155字节.

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

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

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