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

Ios NSData使用UIImageJPEGRepresentation()压缩的图像的长度,ios,uiimage,nsdata,Ios,Uiimage,Nsdata,我们知道可以使用以下代码中的方法UIImageJPEGRepresentation()对图像进行压缩 NSData *imgData = UIImageJPEGRepresentation(imageResized, 0.5); NSLog(@"imgData.length :%d",imgData.length); imageResized = [UIImage imageWithData:imgData]; NSData *imgData2 = UIImag

我们知道可以使用以下代码中的方法
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

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

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


一旦上传到服务器上,该文件将是一个标准JPEG文件,可以被任何设备(包括Android)查看。

您可以从某种大小的
UIImage
开始(比如1024x768)。这在内存中占用1024x768x4个“是”。然后用因子0.5压缩它,得到371155字节

然后使用压缩数据创建一个新的
UIImage
。这仍然是一个1024x768(或任何类型)
UIImage
,因此它现在占用的内存量与原始图像相同(1024x768x4)。然后将其转换为一个新的JPG,压缩更少,得到1308415字节

即使创建了压缩图像的未压缩版本,字节数也来自转换全尺寸的
UIImage
。第二个未压缩图像虽然较大,但仍具有与压缩图像相同的较低质量


因为您的数据代表JPG,任何下载数据的东西都可以将数据视为JPG,包括Android手机。

为什么您希望它们的大小相同?你知道压缩意味着什么吗?@H2CO3请看一看公认的答案,你就会明白为什么我会感到困惑:)是的,我知道什么是压缩:)但我想知道为什么在
imageResized=[UIImage imageWithData:imgData]
之后,我们得到了原始图像。那很有趣@绿园@rmaddy@demon您无法获得原始图像。你看过我的答案了吗?它解释了第二个图像与原始图像的不同之处。@rmaddy我读过它,知道它是一个新图像,但我想知道的是,为什么我们用压缩数据创建一个新图像,然后我们再次从这个新图像获取数据,但我们得到的是原始日期长度。内存中的
UIImage
是宽度x高度x 4字节。文件大小不重要。UIImage是一个未压缩的位图。也许我弄糊涂了。什么“UIImageJPEGRepresentation”压缩没有使用内存,而是其他东西,对吗?