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

5,842 阅读4分钟
早在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 WebP2. NOS 如果你是使用网易 NOS提供的图片,则只需在url加一个参数“&type=webp” 原图:  edu-image.nosdn.127.net/C65CB3C4A92…WebP: edu-image.nosdn.127.net/C65CB3C4A92…
二、压缩率 按照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 等第三方支持方案。
GitHub: github.com/MummyDing/A…
Demo下载Demo下载Demo下载Demo下载Demo下载Demo下载Demo下载Demo下载Demo下载Demo下载Demo下载Demo下载

Demo下载Demo下载Demo下载Demo下载Demo下载Demo下载Demo下载Demo下载Demo下载Demo下载Demo下载Demo下载