WebP初探

WebP
[发音 weppy]
一种新的图片格式,提供更好的无损和有损压缩图片
无损图片比PNG小26%,有损图片在相同品质下比JPEG小25-34%
透明图片也比同等的PNG和JPEG图片小

如何实现

webp有损压缩预编译编码和VP8视频编码器关键帧压缩一样,编译一块的值,相邻块只编译与这块不同的部分
有损压缩则用原图片重建像素

支持

支持Chrome,Opera浏览器等
编码解码库libwebp,命令行编码解码cwebp dwebp

如何转换

libwebp
源码地址

  1. png和jpg转webp
    cwebp [options] input_file -o output_file.webp
    cwebp xxx.png -o xxx.webp
    cwebp xxx.jpg -o xxx.webp
    -H 查看帮助
  2. webp转png和jpg
    dwebp xxx.webp -o xxx.png
    dwebp xxx.webp -o xxx.png
  3. gif 转webp
    ./gif2webp xxx.gif -o xxx.webp
  4. 预览webp
    vwebp [options] input_file.webp

Android项目中使用libwebp

  1. 对与服务端交互过程中使用webp图片
    流文件 BitmapFactory.decodeStream(is);
  2. 应用中的资源文件
    bitmap目录中

有没有兼容性的问题?


https://developer.android.com/guide/topics/media/media-formats.html

  • 4.2.1+ 对于webp的decode、encode是完全支持的(包含半透明的webp图)
  • 4.0+ 到 4.2.1 ,只支持完全不透明的decode、encode的webp图
  • 4.0 以下,应该是默认不支持webp了

寻求兼容库
webp-android
也可通过官方源码自己实现
下载下来/src/main/jni目录,执行ndk-build
src/main/libs目录下copy出你需要的so
然后将其WebDecoder的辅助类copy到项目中即可,注意保持原有包名。

  1. 流文件
    if (Build.VERSION.SDK_INT > Build.VERSION_CODES.JELLY_BEAN) { bitmap = WebPDecoder.getInstance().decodeWebP(streamToBytes(is)); } else { bitmap = BitmapFactory.decodeStream(is); }
  2. 资源文件
    自定义一个布局,同上解析
    <me.everything.webp.WebpImageView android:layout_width="wrap_content" android:layout_height="wrap_content" webp:webp_src="@drawable/test"/>

但是webp很多都是已经存在的项目,使用自定义类还要加属性,万一发现坑,又要还回去也麻烦,需要一种尽可能改动小的方案,就是不动原本的布局文件,动态修改ImageView使其支持Webp
见代码

资源文件更换并不彻底,还存在部分png的图,如何区分webp和非webp的图片资源呢?
见代码

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,856评论 25 709
  • 什么是WebP 具不完全统计,互联网流量中60%都产生于图片,图片永远是流量的大头,如何保证在图片的精细度不降低的...
    戏水龙鹰阅读 6,421评论 1 5
  • 本文会不定期更新,推荐watch下项目。如果喜欢请star,如果觉得有纰漏请提交issue,如果你有更好的点子可以...
    天之界线2010阅读 18,734评论 19 153
  • 不想上班啊。 或者说不想和陌生人打交道。 好多话埋在心里不敢说,自己这么大个人了,说出来只会让爸妈担心。可是自己憋...
    黑暗森林的小灰狼阅读 2,929评论 0 0
  • 每日选读内容笔记 | Day-36 上一讲说了歧视不可避免,因为我们资源、时间、金钱是相对有限的。基于这个考虑,其...
    十二画阅读 3,222评论 0 0