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

这篇文章更适合和设计师一起来看,所以,如果你和你的设计师是好基友的话,不妨叫上他,倒两杯咖啡,花上几分钟…

其实主要有部分图像专业处理上相关的知识,笔者并没有去深入介绍(能力有限),所以有设计师的帮助会让你了解的更透彻。

简介

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

PNG

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

灰度图像

http://baike.baidu.com/view/1549178.htm

α通道

http://baike.baidu.com/view/2211519.htm

VectorDrawable

Android 平台的矢量图形 。

JPG

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

JPEG

http://baike.baidu.com/view/7679.htm

WebP格式

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

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

关于PNG图像的压缩

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

AAPT

aapt 全称 Android Asset Packaging Tool,直译的话,就是Android资源打包工具,这是Android官方提供的一个打包工具,而它在将我们的Android项目打包成apk的过程中,已经自动帮我们完成了一次对于PNG图片的压缩处理。

有兴趣的同学,可以将Android项目源码中的资源图片与apk中解压出来的资源图片的大小对比一下,你会发现apk中的图片会比我们源码中的图片要小,我相信很多小伙伴都没有注意到这一点吧 :)

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

降低图像色彩位数

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

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

PNG压缩优化工具

网上有很多关于PNG格式的压缩优化工具,你可以到Google上搜索 PNG Optimizer ,会出来很多相关的资料。

另外Google官方也有一个开源的项目 Zopfli,是 deflate压缩算法 的另一种实现。

这里需要注意的是:有时候通过其他工具压缩后的PNG图像,再经过aapt工具的压缩,恩,那应该会更小?

WTF !!!

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

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

img-optimizer-gradle-plugin

https://github.com/chenenyu/img-optimizer-gradle-plugin

通过代码来代替PNG

假设你有一个圆形的图像需要展示很用户,如果使用PNG图片的话:

如果你通过代码画出来:

没有对比,就没有伤害。

矢量图代替PNG

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

Potrace

http://potrace.sourceforge.net

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

svg2android

https://github.com/inloop/svg2android

关于VectorDrawable

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

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

关于JPG图像的压缩

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

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

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

降低JPG图像的质量

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

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

JPG压缩优化工具

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

关于WebP

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

另外推荐一个开源库:

WebpifyYourAndroidApp

https://github.com/AndroidDeveloperLB/WebpifyYourAndroidApp

可以将PNG或者JPG转换为WebP图像。

最后

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

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

VectorDrawable>WebP>PNG>JPG

转载于:https://my.oschina.net/JiangTun/blog/914407

Google I/O 2016笔记之图像压缩相关推荐

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

    写在前面 Android开发中的图像压缩是一个很重要的部分.而这篇文章会让我们从另外一个角度来认识Android平台下的图像压缩和优化. 这篇文章更适合和设计师一起来看,所以,如果你和你的设计师是好基 ...

  2. 找回Google Reader丢失的笔记(notes)

    如何找回Google Reader丢失的笔记,以及新版Google Reader样式的调整 以前用Google Reader的时候,为图方便,有一些纯文本的笔记或记事,就直接用Google Reade ...

  3. 了解使用Android ConstraintLayout (Google I/O 2016)

    说明 Google I/O 2016 上发布了 ConstraintLayout, 简直是要变革 Android 写界面方式. 于是第二天我立即找到相关文档尝试, 这是官方提供的 Codelab 项目 ...

  4. Google I / O 2016后果

    这就是包装. Google刚刚结束了年度开发者大会Google I / O的主办,该科技巨头在大会上发布了一些令人兴奋的新产品并发布了一些重要公告. 让我们来看看Google I / O 2016的所 ...

  5. Google I/O 2016——人工智能真正的起点

    这是近年来Google第一次把I/O开发者大会搬到了一个三面环海风景绝佳的露天剧场里举行(见图1).数千来自世界各地不同肤色.不同语言的开发者齐聚一堂,大家自发组成的人浪一波比一波汹涌,会场的气氛比加 ...

  6. Revit 2016 笔记07

    Revit 2016 笔记07 一.楼地层概述 楼地层包括楼盖层和地坪层. 1.1 楼盖层 楼盖层通常由 面层.楼板.附加层和顶棚 四部分组成. 其中,根据使用的材料不同,楼板分为木楼板.砖拱楼板.钢 ...

  7. 互联网企业是时候甩掉你的测试部门啦!(How google test software读书笔记)

    在传统软件行业浸淫了10年,带领的研发团队经历了如下几个阶段: 初创期-10人左右的团队,全能研发工程师,从需求到研发到测试到运维,一个人全搞定,超高效率的时代,成就感爆棚: 发展期-30~50人左右 ...

  8. keep-alive使用_如何使用Google Keep进行无忧笔记

    keep-alive使用 There are a lot of note-taking apps out there. Google Keep may not be as powerful as se ...

  9. Opencv学习笔记(三) -- 图像压缩与保存

    1.图像压缩 1.1常用图像格式 bmp Windows位图格式.该格式为不压缩格式,缺点是图像文件较大. jpg JPEG是为静态图像所建立的第一个国际数字图像压缩标准,也是至今一直在使用的.应用最 ...

最新文章

  1. Leangoo敏捷工具,scrum看板工具截止时间变化~
  2. Sahi (2) —— https/SSL配置(102 Tutorial)
  3. java switch null_[改善Java代码]小心switch带来的空值异常
  4. 在windows下运行Felzenszwalb的Deformable Part Model(DPM)源码voc-release3.1来训练自己的模型
  5. Python中 ‘==‘ 与‘is‘ 以及它们背后的故事
  6. linux删除物理卷命令,如何安全的删除Linux LVM中的PV物理卷(硬盘或分区
  7. Ubuntu 16.04安装SQLite Browser操作SQLite数据库
  8. Linux 技巧: Bash 测试和比较函数 (shell编程)
  9. nginx访问502,日志报错:connect() to 127.0.0.1:180 failed (13: Permission denied)解决
  10. Spring Cloud(Greenwich版)-05-Spring Cloud集成Ribbon(客户端负载均衡组件)
  11. Avast! 4 Server 服务器版license许可文件获得方法
  12. jlink6.80a烧写序列号(serial number)问题记录
  13. Linux下的TCP测试工具
  14. java blazeds_Flex+Java+Blazeds
  15. 函数IsValid()
  16. Linux下date和touch用法
  17. 微信小程序开发--习题
  18. kafka auto.offset.reset参数解析
  19. PHP内核学习(一)SAPI
  20. dell 重装linux系统_预装Linux(Ubuntu)的DELL笔记本重装Windows

热门文章

  1. 如何在word表格中添加删除线,划去不想要的部分?
  2. 软件设计师备考笔记(十六)UML建模及习题
  3. 使用python代码查询12306火车票官网余票
  4. Lua中获取字符串长度整理
  5. 中谷教育01 走进 python
  6. 《牛津字典精华总结》- 初阶系列 - 字母 - M
  7. 软考知识点——结构化语言描述加工逻辑
  8. 利用VBA编程实现从EXCEL表到AUTOCAD表转换
  9. python利用pyautogui自动刷抖音(或其它短视频)
  10. UE5/C++ 基于GAS的Combo连击 4.2 创建连击检测结构体