ios - 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 内存消耗:
png 内存消耗:
解决方案
UIImage imageWithData:
将解压缩PNG文件。结果大小与分辨率匹配:
700 像素 × 700 像素 × 4 字节/像素 = 1,960,000 = 1.87 MByte
此图像不再与 PNG 格式和压缩技术相关。
第二个示例首先解压缩 PNG 文件,然后使用 JPEG 算法对其进行压缩。结果是 – 当然 – 更小,因为它被压缩了。
JPEG 和 PNG 都是用于压缩图像的算法。你会在网上找到很多关于它们如何工作的文档。这远非微不足道...
推荐阅读
- coldfusion - Coldfusion/lucee cffile 上传 makeUnique 不太工作
- git - 尽管可以从浏览器访问服务器,但无法从 Visual Studio 2019 连接到 tfs 服务器
- java - 在 0,0 坐标处启动 Random Walker java 程序时出现问题
- mysql - 特定时间范围内的 Mysql groupby 日期计数
- c++ - 调用浮点数组时未定义的引用
- javascript - dockerode 命令式 cli 等效项
- spring-boot - 使用junit5时Springboot测试无法自动装配TestRestTemplate
- sql - 从字符串中返回带有大写字母的单词
- android - 为什么即使我更改了值也不会调用我的地图实时数据?
- javascript - 我怎样才能做第二