社区编辑

个人签名

199篇博客

【技术调研】WebP格式在Android平台上的应用

社区编辑2018-05-25 10:53
早在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
Android Studio 2.3起可以直接将JPEG/PNG格式转换成WebP格式,具体方法可参考官方指引  Convert Images to WebP
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. 动图
目前Android本身没有提供WebP动图支持,不过Fresco已经支持了。可将直接GIF格式动图直接转换成WebP格式: GIF to WebP converter
透明背景的动图也支持很好,效果如下

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下载


本文来自网易实践者社区,经作者丁钦颖授权发布。