是时候使用 webp 给 apk 瘦身了!

5,774 阅读5分钟

版权声明:本文为博主原创文章,未经博主允许不得转载。

APP的功能越来越多,APP的体积也随之增长。这会给用户的升级带来困扰,影响用户体验,因此app的瘦身就显得尤其重要了。app瘦身的方法有很多,随便一搜便能找到很多方案,例如开启混淆,开启shrinkResources,去除大型的第三方库等等。都是简单易于操作,并且效果明显的。除此之外,图片资源在apk中也是占据非常大的部分的,目前google官方都推荐的方法是使用webp代替jpg、png等图片,这里主要就是对webp在android项目中的使用的实践,给还在犹豫的你提供一个明确的指引。

什么是Webp?

WebP是Google新推出的影像技术,它可让网页图档有效进行压缩,同时在质量相同的情况下,WebP格式图像的体积要比JPEG格式图像小40%,进而让整体网页下载速度加快。为了改善JPEG的图片压缩技术,他们使用了一种基于VP8编码的图片压缩器,利用预测编码技术,同时还采用了一种基于RIFF的非常轻量级的容器。这种容器只会给每张图片增加20字节,但能让图片作者保存他们想要存储的元数据。

android对webp的支持

android同样作为google的产品,minsdk为4.0即api14以上就可以支持webp,但是对透明的图片会存在一些问题,minsdk为4.2.1+即api17可以完美支持webp。
考虑目前市场4.2.1以下的手机占比已经非常稀少,采用webp格式代替jpg、png的方案非常可行。

png,jpg等格式转webp工具

webp作为google官方主推的的图片格式,理所当然得提供了转换工具:Google放出了不同操作系统的WebP文件解码器(libvpx)和命令行工具(webpconv)。

工具下载: developers.google.com/speed/webp/ 需要翻墙哦~

如果是window系统,我们需要WebpCodecSetup.exe(这是一个webp的图片查看插件,有了它才能查看webp格式的图片)和libwebp-0.5.1-windows-x86.zip (转换核心工具)。如果是mac或者linux系统,也有对应的转换工具。

使用也非常简单,解压缩 libwebp-0.5.1-windows-x86.zip ,进入bin目录可以看到cwebp.exe ,这就是转码工具。
这里写图片描述

window的话在此处打开dos命令,输入:

cwebp D:\from\test.jpg -o D:\to\test.webp

即可将图片转换。

但是,这样只能转换一张图片,假如我有一大堆图片要转,怎么办那?
当然有办法,这里需要用到dos的循环执行命令了,首先新建一个txt,写上如下内容:

@echo off for %%a in (D:\from\*.jpg,D:\from\*.png) do ( cwebp %%a -o D:\to\%%~na.webp )

稍微解释下,%%a 是一个变量 , 表示在D:\from 这个目录下所有的.jpg,和.png结尾的文件,都执行cwebp的转换,输出到D:\to\ 目录下,并以.webp结尾。

写完后保存,然后把后缀改成.bat,放到bin目录下。
这里写图片描述

双击运行,就会发现from目录下所有的jpg和png的图片都转化成webp放在了to目录下了!

如果你仅仅想转换少量的图片,或者翻不了墙的话————
除此之外,我还找了一些在线转换的网站(侧面反映目前webp格式已非常普遍):zhitu.isux.us/
这里写图片描述
可以看到有不同品质的压缩,并且高品质压缩也能极大地减小图片的尺寸。

Demo测试

在android项目中,对webp图片的使用和jpg没有任何不同,因此只需将项目中的图片替换成对应的webp格式的图片,完全不用修改代码就能实现图片及apk的压缩。(需要注意 minSdkVersion 17)

接下来会对不同品质压缩的webp图片与原图作对比,查看效果:

1.首先是无损压缩

这里写图片描述

可以看到图片的大小直接减少了一半,运行到手机中看下效果。

这里写图片描述

从肉眼上基本看不出区别,webp无损压缩可以减少图片一半的大小而达到同样无损的效果。

2.有损75%压缩的webp

这里写图片描述

压缩后的图片大小为原图的44%,同样地,我们看下手机中的效果

这里写图片描述

对比画质,粗看的话看不出区别,细看的话还是能看出线条稍微优点模糊。

3.有损30品质的webp

这里写图片描述

压缩后的图片大小仅有原图的22%

这里写图片描述

个人感觉和75%的压缩没啥区别。。。。。

4.最低品质压缩

这里写图片描述

压缩后的图片大小仅有原图的20%

这里写图片描述

这下很明显了,一眼就能看出压缩过,但对于一些小的图片,可以采用最低品质的压缩,能极大地减小图片的大小。

总结

webp格式的图片能有效地减小图片文件的大小而不影响或较小地影响图片的质量。 如果对图片的质量有要求,或者一些全屏的大图片,可以采用无损压缩,能减少50%的大小; 如果对图片的质量没有太高的要求,可以采用最低品质的压缩,能减少80%的图片大小;

缺点:

1.只能支持4.2.1+ ,如需向下兼容需要添加so库,更改代码等,实现复杂。 2.android虽然能像png一样使用webp,即不改变代码,但在android studio 中无法预览webp的图片,使开发调试变得麻烦,不知道后续的版本是否会添加支持。

这里写图片描述

如果有疑问的话可以给我留言~~~~

猜你在找