美文网首页Android学习
Android Studio 2.3 对 WebP 支持

Android Studio 2.3 对 WebP 支持

作者: 简简单单敲代码 | 来源:发表于2017-03-23 11:14 被阅读2054次

摘要:

Android Studio 2.3 正式版发布了,该版本包含一些新特性,包括

  • 对 WebP 支持的更新;
  • ConstraintLayout 库支持更新和布局编辑器的部件面板。
  • 提供一个新的 App Link 助手可以帮助你在应用中构建 URI 的统一视图。
  • 新的运行按钮提供更直观和可靠的立即运行体验。
  • 最后是 Android 模拟器的测试,支持文本的复制和粘贴。

这次就说说 Android Studio 对 webP的支持

关于 webP

什么是 WebP?

WebP(发音 weppy,项目主页),是一种支持有损压缩和无损压缩的图片文件格式,派生自图像编码格式 VP8。根据 Google 的测试,无损压缩后的 WebP 比 PNG 文件少了 45% 的文件大小,即使这些 PNG 文件经过其他压缩工具压缩之后,WebP 还是可以减少 28% 的文件大小。
2010 年发布的 WebP 已经不算是新鲜事物了,在 Google 的明星产品如 Youtube、Gmail、Google Play 中都可以看到 WebP 的身影,而 Chrome 网上商店甚至已完全使用了 WebP。国外公司如 Facebook、ebay 和国内公司如腾讯、淘宝、美团等也早已尝鲜。目前 WebP 也在我厂很多的项目中得到应用,如腾讯新闻客户端、腾讯网、QQ空间等,同时也有一些针对 WebP 的图片格式转换工具,如 智图iSparta 等。

Google 已和正在部署的 WebP 的产品
WebP 的优势

WebP 在各大互联网公司已经使用得很多了,国外的有 Google(自家的东西肯定要用啦,Chrome Store 甚至已全站使用 WebP)、Facebook 和 ebay,国内的有淘宝、腾讯和美团等。
优势主要有以下:

  • PNG 转 WebP 的压缩率要高于 PNG 原图压缩率,同样支持有损与无损压缩
  • 转换后的 WebP 支持 Alpha 透明和 24-bit 颜色数,不存在 PNG8 色彩不够丰富和在浏览器中可能会出现毛边的问题
  • WebP为网络图片提供了无损和有损压缩能力,同时在有损条件下支持透明通道。据官方实验显示:无损WebP相比PNG减少26%大小;有损WebP在相同的SSIM(Structural Similarity Index,结构相似性)下相比JPEG减少25%~34%的大小;有损WebP也支持透明通道,大小通常约为对应PNG的1/3。(同时肉眼几乎无法看出差异)

更进一步了解可以查阅下面的相关博客

相关博客:

WebP 探寻之路
WebP原理和Android支持现状介绍

Android Studio 2.3 对 WebP 支持

Android Studio 2.3使用有一段时间了,在工作之余也尝试了一把将目前项目中的图片利用 Android Studio 提供的工具将项目中的 png 图片转化成 webp,最终项目瘦身成功。最初的10M 左右减到了 8点多 M,成果显著。建议项目比较庞大的可以去替换下。

如何将 png 转化成 webp?

在之前常用的webp转换工具有:XnConvet智图ISparta

而现在我们可以
Google在新版本的Android studio 2.3中加入了对图片压缩的工具,可以直接将PNG,BMP,JPG和静态的Gif图片文件转成Webp格式,占用更少的空间资源,可以极大的缩小apk的大小。
在新版本如何使用:
1.选择你要修改格式的图片,然后右击,在列表的最下端有个Convert to WebP...按钮,如下图所示:

Convert to WebP
2.点击后弹出如下图内容,有需要更改设置可以进行更改,没有可直接点击ok。 可以自己的需要去更改这些状态

3.最后就出现如下图所示内容:

图片小了很多,(≧▽≦)/激动

通过拖动Quality那个轴改吧图片的压缩质量,
中间的Difference表示原图和压缩后的图的一个差异。压缩的越多,difference显示的越清楚。

同时也支持将webp转成png。

APP瘦身

  • 赶紧把项目中的图片按照默认方式去转换下
1000多张,全选一起转
  • 对比下前后 APP 的大小
png 的大小 webp 的大小

前后减少了大约1M 多。

其实我们的项目本身就已经很小了,才十左右,这点我们还是一直会去注意的,一直会做重构和瘦身,保持 APP 的苗条身材。

目前这个转化我是按照系统默认的直接将 png 转成 webp。其实针对很多图片可以更大压缩值的,比如Splash的大图片。这样也可以加快 app 的启动速度。

嗯。我又把 webp 换成 png了,蛋疼的兼容性问题。

问题原因

从官方文档中可以看到在Android4.0到Android4.2.1之间的版本不支持无损压缩和透明格式的WebP图片的编解码。所以如果从要解析的WebP图片中包含无损压缩或透明格式,且当前是Android4.0到Android4.2.1之间的系统,则BitmapFactory解码时就会出错。 Android 中不同格式图片支持

此外,个别Android机型虽然是Android4.0及以上的版本,但是在原生ROM基础上去掉了WebP功能。

分析

Android官方文档中说明了在Android4.0的机器上开始支持了webp图片格式,不过对于无损、透明的图片(设置了setAlpha),图像进行编码时会出错,导致图像无法显示。该问题在Android 4.2.1+解决了,详见官方文档:http://developer.android.com/intl/zh-cn/guide/appendix/media-formats.html

解决方案

虽然在4.0以上都支持了,但是4.0-4.2版本的不支持
Google 爹这点没有做的很好,批评下。

既然不支持Alpha,那么不要Alpha肯定是可以的。
然而在我们项目中几乎所有的图片都是带有Alpha的。
这个时候我用命令把 png转webp。
命令:
cwebp abc.png -noalpha -o abc.web

不要Alpha,效果是这样的:

原图 失去Alpha

这怎么玩。。。

然后还有另外一种方式,就是兼容低版本,需要使用 so 包,看了下挺麻烦的。我决定,等我们项目最低支持到4.2的时候再换成 webp。

嗯,
看了下4.0-4.2的用户还有几百个,坚持就好!

相关文章

网友评论

    本文标题:Android Studio 2.3 对 WebP 支持

    本文链接:https://www.haomeiwen.com/subject/wuconttx.html