iOS 图片压缩有什么好方法?

2015-09-06 17:05:52 +08:00
 zioc
需求是压到 100kb 以下

UIImageJPEGRepresentation 这个无法满足需求
6481 次点击
所在节点    iDev
11 条回复
haosxianr
2015-09-06 17:26:54 +08:00
用 CoreImage 把图片尺寸调低试试
sfz97308
2015-09-06 18:11:24 +08:00
这种需求,直接打回去不给做。不谈图片分辨率只要求文件大小的压缩都是耍流氓。
zioc
2015-09-06 18:14:21 +08:00
@sfz97308 分辨率有需求。。。 只是 UIImageJPEGRepresentation 是按质量压缩,无法控制图片文件大小。
fghfjujiber
2015-09-06 18:26:28 +08:00
CGFloat compression = 0.9f;
CGFloat maxCompression = 0.1f;
int maxFileSize = 250*1024;

NSData *imageData = UIImageJPEGRepresentation (yourImage, compression );

while ([imageData length] > maxFileSize && compression > maxCompression )
{
compression -= 0.1;
imageData = UIImageJPEGRepresentation (yourImage, compression );
}

ref: http://stackoverflow.com/questions/9506871/image-compression-by-size-iphone-sdk

希望能帮到你。
hohoho
2015-09-06 18:32:46 +08:00
先等比例缩放图片 size ,然后再用四楼的方法循环压缩。
pubby
2015-09-06 18:59:13 +08:00
@fghfjujiber
@hohoho 二分法应该会更好一点
xi_lin
2015-09-06 23:44:12 +08:00
在小内存机型上压大图片直接用 UIImageJPEGRepresentation 有可能会死得很惨。。
推荐 https://gist.github.com/jder/4331450#file-downscaling-alassets
zioc
2015-09-07 09:46:53 +08:00
@fghfjujiber 正在用这个方法。有问题:
1.这个方法不一定能压到指定以下
2. UIImageJPEGRepresentation 有时会越压越大
3. 我先等比缩放图片, UIImageJPEGRepresentation 有时会还原图片分辨率大小

@hohoho
kobe1941
2015-09-07 10:15:49 +08:00
@fghfjujiber 我之前也这么干过,然后有些长图清晰度不好,就把需求改了,以压缩比率优先,图片大小不管啦! JPEG 的压缩算法真的很不错的
zioc
2015-09-07 11:07:34 +08:00
@kobe1941 但是目前需求就是这样,对文件大小很敏感。。
hohoho
2015-09-07 18:21:58 +08:00
@xi_lin 给的这个比较靠谱,之前项目中打开大图在 4s 上直接崩溃,其他设备也卡卡的,直接从 ALAsset 处理就不会有类似的问题了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/218652

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX