Android Studio 2.3 对 WebP 支持

摘要:

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 等。

Android Studio 2.3 对 WebP 支持_第1张图片
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...按钮,如下图所示:

Android Studio 2.3 对 WebP 支持_第2张图片
Convert to WebP

2.点击后弹出如下图内容,有需要更改设置可以进行更改,没有可直接点击ok。

Android Studio 2.3 对 WebP 支持_第3张图片
可以自己的需要去更改这些状态

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

Android Studio 2.3 对 WebP 支持_第4张图片
图片小了很多,(≧▽≦)/激动

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

同时也支持将webp转成png。

APP瘦身

  • 赶紧把项目中的图片按照默认方式去转换下
Android Studio 2.3 对 WebP 支持_第5张图片
1000多张,全选一起转
  • 对比下前后 APP 的大小
Android Studio 2.3 对 WebP 支持_第6张图片
png 的大小
Android Studio 2.3 对 WebP 支持_第7张图片
webp 的大小

前后减少了大约1M 多。

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

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

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

问题原因

从官方文档中可以看到在Android4.0到Android4.2.1之间的版本不支持无损压缩和透明格式的WebP图片的编解码。所以如果从要解析的WebP图片中包含无损压缩或透明格式,且当前是Android4.0到Android4.2.1之间的系统,则BitmapFactory解码时就会出错。
Android Studio 2.3 对 WebP 支持_第8张图片
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,效果是这样的:

Android Studio 2.3 对 WebP 支持_第9张图片
原图
Android Studio 2.3 对 WebP 支持_第10张图片
失去Alpha

这怎么玩。。。

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

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

你可能感兴趣的:(Android Studio 2.3 对 WebP 支持)