iOS获取UIImage内存大小

9

我希望获取UIImage对象的实际内存大小。有3种方法:

NSUInteger s1 = UIImagePNGRepresentation(thumbImage).length;
NSUInteger s2 = UIImageJPEGRepresentation(thumbImage, 1).length;
NSUInteger s3  = CGImageGetHeight(thumbImage.CGImage) * CGImageGetBytesPerRow(thumbImage.CGImage);
NSLog(@"s1:%u",s1);
NSLog(@"s2:%u",s2);
NSLog(@"s3:%u",s3);

并且结果

s1:62734

s2:175939

s3:578816

哪一个是正确的?


https://dev59.com/2FjUa4cB1Zd3GeqPQ2bu - virus
1个回答

8

最后一个(s3)是正确的:

  • s1 是保存为 .png 文件时图像的大小
  • s2 是以最佳质量保存为 .jpg 文件时的图像大小

但是为什么将jpg保存到文件时,其大小比png更大呢?在正常情况下应该是相反的。 - user3414228
4
您可以通过降低图片质量来换取 JPG 文件的大小。在 UIImageJPEGRepresentation 中,compressionQuality 参数决定了图像的压缩程度,它的取值范围为 0 到 1。在这个代码示例中,JPG 表示法采用了质量设置为 1,也就是最高质量,因此生成的 JPG 文件会非常大。PNG 是无损压缩,根据图片不同情况,可能比“高质量”JPG 文件更小。 - bobnoble
1
@bobnoble 为什么内存和磁盘大小不同? - onmyway133
2
@onmyway133 内存中的大小基于照片的尺寸(宽度和高度)和深度(每像素字节数)。内存中的照片不像磁盘上的jpeg或png照片那样被压缩。 - bobnoble

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接