浅谈移动端图片压缩
原文中文,约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纹理压缩算法效果良好,经过自测表现不错。
🏷️