浅谈移动端图片压缩

💡 原文中文,约5500字,阅读约需14分钟。
📝

内容提要

本文介绍了移动端图片压缩的基础知识和方法,包括二分法和luban算法。作者还分享了自己编写的Unity纹理压缩算法。

🔎

延伸解读

二分法压缩的适用场景与局限

文章介绍的二分法通过循环调整压缩质量,使图片文件大小接近指定上限。这种方法适合对上传图片有硬性大小要求的场景,但缺点是无法动态调整分辨率,可能导致图片质量损失较大。此外,压缩后得到的是NSData,若后续需转换为UIImage再上传,可能因框架问题导致大小再次超标,开发者需注意这一潜在风险。

Luban算法的设计思路与优化空间

Luban算法基于微信朋友圈的压缩策略,通过计算图片长宽比和长边尺寸动态决定采样率,再以固定60%质量压缩。其源码简洁,但存在优化空间:例如在计算采样率时,某些分支未考虑长边小于1280的情况,可能返回0;压缩率固定为60%也未根据图片内容动态调整。作者建议可根据压缩前后尺寸动态设定压缩率,以提升效果。

从Luban到Unity:压缩算法的融合与自研

作者在对比Luban等算法后,编写了一套Unity纹理压缩算法。该算法借鉴了Luban的分辨率计算逻辑,但调整了缩放策略:根据计算出的采样率,使用指数函数动态计算目标宽高,而非直接整除。这种融合思路在自测中效果良好,为Unity开发者提供了移动端图片压缩的参考实现。

❓

Q&A

移动端图片压缩的主要目的是什么?

移动端图片压缩的主要目的是获取更小的图片文件大小。

二分法在图片压缩中是如何工作的?

二分法通过指定文件大小来确定压缩次数,以找到合适的压缩率。

Luban算法的特点是什么?

Luban算法是基于对微信朋友圈的总结,能够有效压缩图片,且源码可以优化。

移动端常见的图片格式有哪些?

移动端常见的图片格式包括JPG、PNG和WEBP。

如何设置图片的分辨率和压缩质量?

设置图片的分辨率和压缩质量是压缩流程的关键,需要寻找最佳数值。

作者编写的Unity纹理压缩算法有什么效果?

作者编写的Unity纹理压缩算法效果良好,经过自测表现不错。

🏷️

标签

➡️

继续阅读