Google I/O 2016 Android笔记之图像压缩

写在前面

Android开发中的图像压缩是一个很重要的部分。而这篇文章会让我们从另外一个角度来认识Android平台下的图像压缩和优化。

这篇文章更适合和设计师一起来看,所以,如果你和你的设计师是好基友的话,不妨叫上他,倒两杯咖啡,花上几分钟...
...
...
其实主要有部分图像专业处理上相关的知识,笔者并没有去深入介绍(能力有限),所以有设计师的帮助会让你了解的更透彻。

简介

日常我们在Android开发中接触到的图像,主要有以下四种格式:

1.png

1. PNG
PNG的名称来源于“可移植网络图形格式(Portable Network Graphic Format,PNG)”,PNG用来存储灰度图像时,灰度图像的深度可多到16位,存储彩色图像时,彩色图像的深度可多到48位,并且还可存储多到16位的α通道数据。PNG使用从LZ77派生的无损数据压缩算法,一般应用于JAVA程序、网页或S60程序中,原因是它压缩比高,生成文件体积小。

2. VectorDrawable
Android 平台的矢量图形 。

3. JPG
JPG全名是JPEG。JPEG图片以 24 位颜色存储单个位图。JPEG 是与平台无关的格式,支持最高级别的压缩,不过,这种压缩是有损耗的。渐近式 JPEG 文件支持交错。

4. WebP格式
谷歌Google)开发的一种旨在加快图片加载速度的图片格式。图片压缩体积大约只有JPEG的2/3,并能节省大量的服务器带宽资源和数据空间。Facebook Ebay等知名网站已经开始测试并使用WebP格式。

本文所说的图像压缩就是关于以上这四种格式


关于PNG图像的压缩

PNG图像是Android开发中使用的比较广泛的,而它的压缩和优化的方式也相应比较多。

1. AAPT
aapt全称Android Asset Packaging Tool,直译的话,就是Android资源打包工具,这是Android官方提供的一个打包工具,而它在将我们的Android项目打包成apk的过程中,已经自动帮我们完成了一次对于PNG图片的压缩处理,有兴趣的同学,可以将Android项目源码中的资源图片与apk中解压出来的资源图片的大小对比一下,你会发现apk中的图片会比我们源码中的图片要小,我相信很多小伙伴都没有注意到这一点吧 :)

而在官方视频中的介绍,aapt工具对于图像压缩只做了三件事:specifically , no more , no less
简单来说的话就是对图像进行了二次处理,如下图所示:

2.png

2. 降低图像色彩位数
如果你的图像文件的色彩比较单一,那么你可以通过降低图像的位数来进行压缩,如下图所示:

3.png

注意:降低色彩位数的前提是,并不会影响用户对图像的观看。

3. PNG 压缩优化工具
网上有很多关于PNG格式的压缩优化工具,你可以到Google上搜索 PNG Optimizer ,会出来很多相关的资料。
另外Google官方也有一个开源的项目Zopfli,是deflate压缩算法的另一种实现。
这里需要注意的是,有时候通过其他工具压缩后的PNG图像,再经过aapt工具的压缩,恩,那应该会更小?

4.png

WTF !!!

别急,这里需要对Gradle文件添加一行配置:

5.png

这里推荐一个插件img-optimizer-gradle-plugin,一款用于优化png图片的gradle插件,有效减少APK体积,支持极限压缩和无损压缩。

4. 通过代码来代替PNG图
假设你有一个圆形的图像需要展示很用户,如果使用PNG图片的话:

6.png

如果你通过代码画出来:

7.png

没有对比,就没有伤害。

5. 矢量图代替PNG图

关于用矢量图去代替PNG,官方视频中介绍了一个位图转换为矢量图的工具Potrace

8.png

矢量图同样也可以再经过处理转换成VectorDrawable格式,而size会进一步变小。这里有一个开源库svg2android,可以将svg转换为VectorDrawable 。

关于VectorDrawable

VectorDrawable(矢量图形)是Android官方推出一个新的特性,为我们提供了添加复杂矢量图形的强大功能,同时也提供了动画显示这些图形的方法。矢量图形的好处是放大不会失真,可以适应不同分辨率的屏幕。所以,它是你图像压缩和优化的首选,尽可能的去使用吧。

关于VectorDrawable的介绍和使用,这里不做过多的介绍。

关于JPG图像的压缩

当谈到关于JPG的图像的时候,官方视频中的讲解者Colt McAnlis如是说到:


9.png

By the way ,Colt McAnlis的视频讲解非常富有激情,也很幽默,我个人比较喜欢他。Google 官方的Android Performance Patterns(性能优化视频)合集中有很多是由他来讲解的,所以强烈推荐有兴趣的同学去看看。

JPG相对于PNG格式的图像,更加复杂,所以一般不推荐直接使用JPG图像。关于JPG图像的压缩方式有以下几种:

1. 降低JPG图像的质量

10.png
11.png

以上两张图片,通过将图片的质量降低,图片大小由263k减少到25k,压缩的非常可观,当然并不是所有的JPG图像都适用这种降低质量的方式,因为首先,你需要在保证在不影响人肉眼观看的效果的前提下,再去降低图像的质量。

但是,这里会出现一个问题,如果你有很多张这样的图片,然后你手动的一个个通过比对去降低,这样的效率会非常低下。所以官方视频中为这种方式提供了一个图像质量适用规则:

12.png

2. JPG 压缩优化工具

同样的,网上关于JPG图像的一些压缩优化工具也很多,你可以Google搜索下JPG Optimizer

13.png

关于WebP

谷歌Google)开发的一种旨在加快图片加载速度的图片格式,所以,强烈推荐使用WebP图像来替换PNG和JPG图像。

另外推荐一个开源库WebpifyYourAndroidApp,可以将PNG或者JPG转换为WebP图像。

最后

如果你觉得以上内容太多,记不住的话, 没关系,官方视频为我们提供一张总结图:

14.png

简单来说,从图像压缩和优化的角度来看的话,当你在选择图像的时候,应当考虑的优先级如下:
VectorDrawable>WebP>PNG>JPG

另:因为本文涉及到很多有关图像相关的专业知识,如果有错误的地方,欢迎指出 :)

参考

Image compression for Android developers - Google I/O 2016

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 201,784评论 5 474
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,745评论 2 378
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 148,702评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,229评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,245评论 5 363
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,376评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,798评论 3 393
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,471评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,655评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,485评论 2 318
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,535评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,235评论 3 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,793评论 3 304
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,863评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,096评论 1 258
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,654评论 2 348
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,233评论 2 341

推荐阅读更多精彩内容