首页 > 解决方案 > UIImageJPEGRepresentation() 如何工作

问题描述

一个 700x700 png 图像,显示 imageview 成本为 1.88Mib 内存,但如果我用 UIImageJPEGRepresentation(data, 0.9) 压缩它,内存成本降低到 736Kib 但图像大小不变,jpg 像素没有 alpha,但内存成本减少了将近 62%,我想知道 UIImageJPEGRepresentation() 是如何工作的?谢谢

加载png图片:

NSString *path = [[NSBundle mainBundle] pathForResource:@"bbb" ofType:@"png"];
NSData * data = [NSData dataWithContentsOfFile:path options:NSDataReadingMappedIfSafe error:NULL];
UIImage * img = [UIImage imageWithData:data];

加载jpg图片

NSString *path = [[NSBundle mainBundle] pathForResource:@"bbb" ofType:@"png"];
NSData * data = [NSData dataWithContentsOfFile:path options:NSDataReadingMappedIfSafe error:NULL];
UIImage * img = [UIImage imageWithData:data];
img = [UIImage imageWithData:UIImageJPEGRepresentation(img, 0.9)];

jpg 内存消耗:

jpg 内存消耗

png 内存消耗:

png 内存消耗

标签: iosuiimagejpegrepresentation

解决方案


UIImage imageWithData:将解压缩PNG文件。结果大小与分辨率匹配:

700 像素 × 700 像素 × 4 字节/像素 = 1,960,000 = 1.87 MByte

此图像不再与 PNG 格式和压缩技术相关。

第二个示例首先解压缩 PNG 文件,然后使用 JPEG 算法对其进行压缩。结果是 ⁠– 当然 ⁠– 更小,因为它被压缩了。

JPEG 和 PNG 都是用于压缩图像的算法。你会在网上找到很多关于它们如何工作的文档。这远非微不足道...


推荐阅读