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工具

如果是android studio的IED工具的话,自带转化工具。

1 在需要转化的图片上,右键选择“Convert to WebP

2 弹出一个dialog框,可以选择一些参数,如下

APP瘦身之webp实践

3 选择无损,或者有损。

注意:九宫格的图片不会被压缩

如果选择有损压缩,那么会弹出下面的一个dialog框

APP瘦身之webp实践

4 finish



下面是一个demo测试,分别感知有损压缩的程序

Demo测试

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

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

1.首先是无损压缩

APP瘦身之webp实践

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

APP瘦身之webp实践

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

2.有损75%压缩的webp

APP瘦身之webp实践

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

APP瘦身之webp实践

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

3.有损30品质的webp

APP瘦身之webp实践

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

APP瘦身之webp实践

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

4.最低品质压缩

APP瘦身之webp实践

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

APP瘦身之webp实践

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

总结

webp格式的图片能有效地减小图片文件的大小而不影响或较小地影响图片的质量。 
如果对图片的质量有要求,或者一些全屏的大图片,可以采用无损压缩,能减少50%的大小; 
如果对图片的质量没有太高的要求,可以采用最低品质的压缩,能减少80%的图片大小; 
缺点: 
1.只能支持4.2.1+ ,如需向下兼容需要添加so库,更改代码等,实现复杂。 
2.android虽然能像png一样使用webp,即不改变代码,但在android studio 中无法预览webp的图片,使开发调试变得麻烦,不知道后续的版本是否会添加支持。 

相关文章: