iOS获取UIImage内存大小

Posted

技术标签:

【中文标题】iOS获取UIImage内存大小【英文标题】:iOS get UIImage memory size 【发布时间】:2014-08-25 10:32:36 【问题描述】:

我想获取 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

哪个是对的?

【问题讨论】:

***.com/questions/6402614/… 【参考方案1】:

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

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

【讨论】:

但是为什么保存到文件时jpg尺寸比png尺寸大,正常情况下应该是相反的。 您可以用 jpg 文件大小换取图像质量。 UIImageJPEGRepresentation compressionQuality 参数确定压缩量,范围从 0 到 1。在代码示例中,jpg 表示的质量设置为 1,或最高质量,这将产生最大的 jpg 文件。 PNG 是一种无损压缩,根据图像的不同,生成的文件大小可能比“高质量”的 jpg 文件更小。 @bobnoble 为什么内存和磁盘大小不同? @onmyway133 内存大小取决于照片的大小(宽度和高度)和深度(每像素字节数)。内存中的照片不会被压缩,因为 jpeg 或 png 照片在磁盘上。

以上是关于iOS获取UIImage内存大小的主要内容,如果未能解决你的问题,请参考以下文章

iOS - 调整图像大小导致内存泄漏

加载 UIImage 时 iOS 应用程序崩溃(虚拟内存未清理)

访问 UIImage 属性而不在内存中加载图像

如何在ios的UIView中找到遮罩的位置和大小

iOS根据网络图片的size大小设置UIImageView的大小

java如何获取一个对象的大小