安卓APK瘦身(二)APP中UI图片的瘦身

May 19, 2017


上次说到了在“追影”APP中美术资源占用空间的比例过大,给apk安装包瘦身需要首先从图片开始。那么问题来了,给图片瘦身的第一步是自己压缩图片吗?其实不是的。我们的app中有各种美术资源图片,包括按钮icon、各种logo、背景图等等,有一些图是明显过大需要压缩的,比如3840*2160的超大背景图。所以我缩小美术资源占用空间的第一步是让UI设计师把一些明显过大的图片给压缩了,再给前端直接替换。效果还是很明显的,经过压缩之后DownloadSize由11M缩小到了8M。下面两个图是对比:

图片1 图片2

但是即便图片尺寸缩小了,占用空间还是达到30%以上,这样肯定是不行的。背景图小得不能再小,不然就糊了,这时候怎么办呢? 可以看到我们的美术资源都是png图片,但是并非所有图片都需要透明。也就是说,可以把不需要alpha通道的部分png图片转换成jpg,这样可以省去一些空间,比如下面这张背景图:

图片3 图片4

这样转换后确实减少了不分大小,但是并不明显,可以转换成jpg的图片并不多,重新打包发现整个安装包只减少了不到300k。

最后,为了进一步减小安装包的大小,多方查阅资料后我决定把图片格式转换为webP。其实webP不算是一个新东西,2010年就推出了,webP格式的图片能够在肉眼难以区分的情况下对缩小图像的体积,现在Google、YouTube等等都已经大规模使用这种图片格式以节省流量了。静态的webP图片,直接替换原图就可以使用了,十分方便。

将上图的背景图片转为webP后效果惊人,在并未看到明显质量差异的情况下缩小了十几倍!

图片5

于是对体积较大的背景图、icon、logo都进行压缩,居然减小了94%的图片占用体积:

图片6

在使用webP处理时需要注意一些坑,直到Android4.2基本才完全支持WebP,Android4.0只有部分机型支出,Android4.1可能不支持有alpha通道的(透明的)webP。在引进webP格式的图片后,整个安装包的体积又减小了1.5M,且res目录只占用14%的空间了。

图片7

下面放上一个对比图,就是前文提到的那张背景,左边是png原图,右边是webP:

5 ![5](图片4
PNG原图 WebP