WebP是Google提供的图像文件格式,支持有损压缩(如JPEG)和透明度(如PNG),基于更先进的压缩算法,可以提供比JPEG/PNG更好的压缩效果。 Android 4.0(API-14)开始支持有损WebP图像,Android 4.3(API-18)开始支持无损且透明的WebP图像。
由于现在Google Play已经强制要求开发者采用的targetVersion不得小于26。因此绝大多数应用的minsdkVersion都已提升至14。因此在jpg转换webp上可以说是毫无障碍的。
appcompat的最低兼容:
appcompat版本号 | 最低兼容API级别 | 对应版本号 |
---|---|---|
v23.X.X | API-7 | 安卓2.1 |
v25.X.X | API-9 | 安卓2.3 |
V26.X.X | API-14 | 安卓4.0 |
V28.0.0(最新) | API-14 | 安卓4.0 |
minsdk问题
当项目设置的minsdk小于18时,无损压缩是不可用的。如果对图像质量要求很高必须使用无损压缩,可利用dimens版本适配,暂时先将minsdk提升至18,将需要转换的图片转换完成后放入drawable-xhdpi-v18中,原图保留在drawable--xhdpi中,转换完毕后再将minsdk还原。转换选项解释
- 对整个drawable文件夹或者单个jpg/png选中右键菜单,选择convert to webp...
-
转换菜单可选项如下:
实际效果
- 无损压缩:
- jpg格式无损压缩:可能出现比原图更大的问题。不考虑
- png格式无损压缩:根据图片展示内容,也可能出现比原图大的情况,如果是简单的线条图案,可以压缩40%左右
- 有损压缩:可以预览压缩比例,默认75%
-
jpg格式有损压缩:左侧显示原图,右侧显示结果图,中间显示两者差异。可拖动下方seekbar选择压缩质量 当采用75%有损压缩,可减小10%-90%的存储空间。
- png格式有损压缩:预览选择最优效果,可减小20%-80%的存储空间。实测发现安卓4.2(API-17)是支持alpha-png转换的webp,而不是官方所说的从4.3开始支持。如图所示:(左侧安卓4.2,右侧安卓8.1)
-
jpg格式有损压缩:左侧显示原图,右侧显示结果图,中间显示两者差异。可拖动下方seekbar选择压缩质量 当采用75%有损压缩,可减小10%-90%的存储空间。
webp的网络加载
服务端如果下发webp格式的图片,由于图片变小,可以显著减少带宽开销,并提升加载速度。
结论
- webp的转换对apk的瘦身效果是非常明显的。测试使用的项目只进行了xhdpi适配,转换后进行apk分析,drawable-xhdpi由4.4M缩小到2.0M。
- drawable资源文件如果只提供一份,谷歌目前的建议是提供xxhdpi,对应ios的三倍图。因为安卓手机普遍大屏化,以往xhdpi适配在大屏手机上确实会有模糊问题