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机型虽然是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平台上实现H264解码
  2. [转]Simple Guide for Porting Android(安卓)Kernel
  3. Android和Linux kernel版本对应表
  4. Android(安卓)studio项目不能编译,提示设备版本过低
  5. (Android)react-native获得手机的Android版本号
  6. android中TextAppearanceSpan的使用
  7. Android版本与Linux内核
  8. Android的SDK与ADT不匹配问题
  9. Android(安卓)UI开发第三十三篇——Navigation Drawer For Andro

随机推荐

  1. Ubuntu16.04下安装pip
  2. 互联网架构设计之Redis篇-【Redis Window
  3. Centos下安装破解Jira7的操作记录
  4. 微信二维码支付native原生支付开发模式二
  5. 信息安全第一篇(加密算法介绍)
  6. Linux硬盘挂载
  7. Java项目Centos7发布之发布过程
  8. 信息安全第二篇(加密算法对比)
  9. 运维安全之Tripwire
  10. 信息安全第三篇(网络传输的加密与解密)