早在2010年,Google便推出了WebP这种图片格式,相较JPEG格式,它拥有更高的压缩率,并在次年增加了对动画和和透明度的支持。在Android平台上,Google自Android 4.0(API level 14) 开始提供支持,其中 API level 18 之前是提供基本支持,之后增加了对透明度的支持。今年三月份,Google发布的Android Studio 2.3 版本中则在工具层面提供了更加完备的支持:支持WebP格式的预览以及 PNG, JPEG, BMP和WebP格式之间的转换。本文主要讨论WebP在Android平台上的应用情况。
一、格式转换
现在我们的图片格式还是以JPEG/PNG为主,当我们采用WebP格式前,免不了格式的转换,以下介绍两种方案。
1. Android Studio
2. NOS
如果你是使用公司NOS提供的图片,则只需在url加一个参数“&type=webp”
原图:
WebP:
二、压缩率
按照Google官方的说法是,将JPEG/PNG无损转换成WebP可以减少25%~35%的体积。笔者准备了80张JPEG/PNG格式图片,利用
NOS平台将其批量转换成WebP格式。前者体积为10.8MB,后者为3.9MB,也就是说转换成WebP格式的图片体积仅为转换前的36.1%,
这对于数据流量付费、硬件受限的移动设备来说是极具诱惑力的。
下面是图片转换前后的对比,肉眼看不出什么区别
【转换前JPEG 18KB】
【转换后WebP 11KB】
Google官方提供的统计数据如下
三、兼容性
根据Google提供的用户指引, Android 4.0开始可以使用WebP,Android 4.3开始提供透明度支持。接下来便是围绕着WebP在各种
情况下的表现展开的。
1. 从网络获取图片
下面是分别是从网络获取JPEG/PNG格式和WebP格式图片的效果
【JPEG/PNG 格式】 【WebP 格式】
Android Monitor Memory情况
【JPEG/PNG Java Heap】
【WebP Java Heap】
- 从图片质量来看,WebP格式图片质量并没有因为更高的压缩率而出现损耗;
- 从运行内存使用情况来看,二者没有发现明显差异。
2. 从本地获取
直接将JPEG/PNG 和 WebP 格式图片打包到Apk中加载
【JPEG/PNG 格式】 【WebP 格式】
【JPEG/PNG Java Heap】
【WebP Java Heap】
结果与网络获取差不多,内存占用上来看,WebP还稍高一些,总体差距不明显
3. 透明背景图片
透明图片主要是针对Android 4.3以下的设备,直接加载就是无法展示。由于目前云课堂使用的图片加载库是Glide,于是便使用Glide进行加载。
效果如下:
同样是不支持
据了解,Facebook 的 Fresco 在WebP的支持方面做了些工作
使用后的效果如下
完美支持!
3. 动图
透明背景的动图也支持很好,效果如下
4. WebView
在WebView上,笔者尝试了透明背景的WebP,其表现与Native一致,Android 4.3 以下版本并不支持
WebP格式在Android平台上应用,优势主要是它能以更小的体积展示质量相近的图片,这意味着
节省更多的用户数据流量,更快的图片下载速度,更少的磁盘存储
空间占用;它的局限主要是要在Android 4.3及以上才能完美支持,但是目前Android 4.3 以下还有一定用户量并不能完全放弃。解决方案主要有:
1. 对版本进行判断:Android 4.3以下采用传统的图片格式,Android 4.3及以上启用WebP格式;
2. 使用Fresco 等第三方支持方案。
Demo下载Demo下载Demo下载Demo下载Demo下载Demo下载Demo下载Demo下载Demo下载Demo下载Demo下载Demo下载Demo下载Demo下载Demo下载
Demo下载Demo下载Demo下载Demo下载Demo下载Demo下载Demo下载Demo下载Demo下载Demo下载Demo下载Demo下载Demo下载Demo下载Demo下载
本文来自网易实践者社区,经作者丁钦颖授权发布。