搜索
您的当前位置:首页正文

WebP初探

来源:哗拓教育

如何实现

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

支持

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

如何转换

  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目录中

有没有兼容性的问题?

  • 4.2.1+ 对于webp的decode、encode是完全支持的(包含半透明的webp图)
  • 4.0+ 到 4.2.1 ,只支持完全不透明的decode、encode的webp图
  • 4.0 以下,应该是默认不支持webp了
  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的图片资源呢?
见代码

Top