WebP图片格式

WebP是Google在2010推出的一种图片格式,此图片格式可以比jpeg有更小的体积,同时支持无损压缩和透明。关于WebP格式的介绍参见 http://www.jonathanklein.net/2013/02/a-comprehensive-guide-to-webp.html。

问题描述

Android原生支持的图片格式有JPEG,PNG,GIF,BMP和WebP五种。WebP格式是从Android4.0版本开始支持,对Android4.0及以上版本可以直接用BitmapFactory来实现解码,对Android4.0以下版本不支持。
使用BitmapFactory对图片解码的示例代码如下,options是BitmapFactory.Options对象。BitmapFactory会自动判断图片格式,如果解码成功会返回一个有效的Bitmap对象,如果解码失败会返回null。

Bitmap bitmap = BitmapFactory.decodeStream(imageStream, null, options);

正常来说,对Android4.0及以上版本通过上述代码解码WebP格式应该能够返回有效的Bitmap对象,然后实际使用过程中发现,有些WebP格式图片在Android4.0以上机型上无法通过BitmapFactory来解码,此外有个别机型虽然也是Android4.0以上版本,但所有WebP格式图片都无法解析。

问题原因

从官方文档中可以看到在Android4.0到Android4.2.1之间的版本不支持无损压缩和透明格式的WebP图片的编解码。所以如果从要解析的WebP图片中包含无损压缩或透明格式,且当前是Android4.0到Android4.2.1之间的系统,则BitmapFactory解码时就会出错。
Android兼容性问题 -- WebP格式图片解码失败_第1张图片
此外,个别Android机型虽然是Android4.0及以上的版本,但是在原生ROM基础上去掉了WebP功能,目前发现的只有NokiaXL,它是Android4.1的版本,但不支持任何WebP格式的编解码。

解决方法

Android SDK中并没有任何api可以判断当前设备是否支持WebP格式,也没有办法在解码前判断一张WebP格式图片中是否包含无损压缩和透明格式。只能通过BitmapFactory.decodeStream的结果来判断是否解码成功。因此,只能先尝试用BitmapFactory来解码,如果解码失败,再尝试用其他方法(通过google提供的libwebp)。目前来看Android4.2及以上版本中应该都已经支持所有的WebP格式图片的解码,因此,也可以统一从Android4.2版本开始用BitmapFactory来对WebP格式图片编解码,对Android4.2以下版本用其他方式实现。

参考:http://stackoverflow.com/questions/28188374/check-if-the-device-supports-webp-image-format

更多相关文章

  1. Android和Linux kernel版本对应表
  2. android静态图片和动态壁纸
  3. Android : SeekBar 实现图片旋转缩放
  4. android小问题:RadioButton设置文字在图片背景的下方
  5. Android studio项目不能编译,提示设备版本过低
  6. Android BitmapShader 实战 实现圆形、圆角图片
  7. (Android)react-native获得手机的Android版本号
  8. Android:ImageView如何显示网络图片
  9. Android 在 xml中定义图片

随机推荐

  1. 浅谈android的selector背景选择器
  2. Android(安卓)本地广播动作
  3. Android(安卓)Handler机制 - handleMessa
  4. Android通过Alpha实现渐变效果的几个方法
  5. Android(安卓)最火的快速开发框架XUtils
  6. Android学习(2)EditView属性
  7. android性能测试bootchart篇
  8. Android广告平台
  9. Android(安卓)性能优化之内存泄漏检测以
  10. Android声音管理方法