千家信息网

Android图片资源瘦身的方法是什么

发表于:2024-11-23 作者:千家信息网编辑
千家信息网最后更新 2024年11月23日,这篇文章主要介绍"Android图片资源瘦身的方法是什么",在日常操作中,相信很多人在Android图片资源瘦身的方法是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答
千家信息网最后更新 2024年11月23日Android图片资源瘦身的方法是什么

这篇文章主要介绍"Android图片资源瘦身的方法是什么",在日常操作中,相信很多人在Android图片资源瘦身的方法是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"Android图片资源瘦身的方法是什么"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

一.选择压缩工具

首先是选择压缩工具的问题,在这之前先看下系统是如何做的。android的aapt在编译阶段其实是会对png图片进行压缩的,用的则是libpng和zlib,这个可以用aapt的源码佐证:

  • 用libpng对图片进行预处理

  • 用zlib对预处理后的图片进行压缩生成新图片

可以看到aapt对图片的压缩等级使用了最高等级9,期间系统也会做颜色表转换,这样可以减少很大一部分图片的体积,但系统的压缩方案是不是完美无缺呢?目前常用的无损压缩大概有Pngrewrite、pngcrush、optipng、advancecom、pngout,参考了很多文章,得出的结果是pngout仍然是王者,毕竟是Ken神童(据说Doom and Quake的作者John都尊敬他,做游戏的肯定都知道John )写的。另外由于pngout可以很好的支持命令行,方便放到编译脚本中自动化,所以暂时选它好了。

二.实践案例

压缩工具选好了,第二步便是实验了。拿手Q为例,直接对手Q中的所有png压一遍,Pngout的速度确实一般,对4千张图片全部处理一遍大概需要13分钟,不过这个过程只需要在本地做一遍,所以可以忍受,但处理完的结果不理想,因为没什么效果,减小量为十几KB~~ 仔细分析得知这里面犯浑作怪的竟然是aapt,由于先调pngout再调aapt会导致压缩效果覆盖。那么可不可以关闭aapt呢? 查看aapt的参数,关于压缩相关的只有下面这两个参数:

其中crunch便是预处理资源了,但是没有关闭crunch的参数。。。。有点技穷了对不对。只能去源码中找灵感了,看aapt的源码:

google把它隐藏了,没有打印出来给用户~打开这个参数,在手Q中资源打包脚本处分别加入--no-crunch参数,便可以把系统压缩给屏蔽掉了,样式如下:

至于为什么设置了这个参数就可以屏蔽呢,其实源码调用过程如下:

第1步 (Main.cpp)

第2步 (Command.cpp)

第3步 (Resource.cpp)

终结: (Resource.cpp)

可是实验还没有结束,因为这样屏蔽掉会出现奇葩的景象,得到的手Q画面效果如下:

为什么呢?仔细分析发现九宫格图片被压出问题了,aapt在处理png图片时会判断是不是九宫格图片,如果是则做特殊预处理:

do_9patch其实主要的是九宫格信息弄出来,写入到info9Patch字段,并最终写入nptc的chunk中:

到这里又回到第一步为什么我说Ken是神童了,因为Pngout可以选择chunk进行压缩,所以解决方案便是:对于九宫格图片,我们单独拎出来,先用aapt的aapt crunch进行预处理得到npTc字段,再用pngout在压缩时调用"knptc"参数保护一下npTc块,这样便得到了正确的九宫格图片,安装包的效果图也就正常了。

到此,关于"Android图片资源瘦身的方法是什么"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

图片 参数 资源 方法 九宫 预处理 图片资源 效果 源码 系统 学习 工具 问题 处理 选择 字段 文章 方案 更多 神童 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 内蒙古DBA数据库工程师 数据库CEO籍贯 自己动手设计数据库 fm2022数据库选择不了 体育赛事投注软件开发 无线网络技术第3版答案 在429网络安全周2021 大型互联网科技项目落地 计算机网络技术应用就业 顶层网络安全保障体系 方舟非主机服务器怎么开 数据库期末考试题库和答案 数据库中复制粘贴 简单网络安全的选择题和判断题 ftp服务器程序源代码下载 数字化网络技术培训 吉安服务器机柜价格 深圳医云互联网医疗科技龙头企业 数据库怎么校验完整性md5 人工智能深度学习工作服务器主机 sql数据库时间截取取日 汉化游戏怎么将数据库切换到繁体 数据库应用能力分析 深圳市小易互联网科技有限公司 深信服的网络安全设计方案 电子商务平台数据库设计需求分析 吉林网络技术咨询质量服务 数据库中复制粘贴 基于的社交网络安全 如何设置电信网站服务器
0