Gradle入门到实战(二) — ImageOptimization安卓图片转换压缩插件
上一篇我们了解了Gradle的各个方面,本篇介绍一款安卓图片优化转换插件,目前已在项目中使用,可一键批量转换压缩图片,webp转换与png/jpg压缩就是那么简单
GitHub项目地址:ImageOptimization
ImageOptimization
安卓图片优化插件:能有效减少apk安装包大小,支持png/jpg转为webp,支持png图片有损无损压缩,支持jpg有损压缩
支持的os
macOS、windows10上已经测试通过,linux上暂时没测试。
引入ImageOptimization
在Project的build.gradle文件中:
buildscript {
repositories {
jcenter()
}
dependencies {
...
classpath 'com.wanglei.image-optimization:optimization:1.0'
}
}
在你想要优化的module的build.gradle文件中引入插件: 如在多个module使用则每个module都要引入插件
apply plugin:'com.wanglei.image-optimization'
同步之后会生成如下任务:双击执行任务即可

任务生成规则
imageOptimization_module名字_variant名字
配置项
在module的build.gradle文件中添加配置选项,配置插件优化的策略以及参数:
ImageOptimization{
pluginStrategy = "compress"
convertWebpQuality = 80
jpegCompressQuality = 90
appIconName = "ic_launcher"
appIconRoundName = "ic_launcher_round"
convertWebpType = "lossy"
compressPngType = "lossless"
pngCompressQuality = 79
}
ImageOptimization支持多项参数配置,灵活度高,可根据项目需要自己配置参数,可配置优先转为webp不能转换的在进行图片的压缩,同样你也可以配置只进行图片的压缩而不转为webp
配置项参数说明
| 参数 | 是否必须 | 参数配置 | 参数说明 |
|---|---|---|---|
| pluginStrategy | 否 | 可配置"webp"或者"compress" | 插件运行策略参数:如配置为"webp"则会将图片优先转为webp格式,如果不能转换或者转换失败或转换为图片更大则进行图片的压缩,如配置为"compress"则只进行图片的压缩不会转为webp,此参数如不配置默认为"compress" |
| convertWebpType | 否 | 可配置"lossy"或者"lossless" | webp转换类型参数:"lossy"转为webp采用有损转换模式,"lossless"转为webp采用无损模式,此参数默认为"lossy" |
| compressPngType | 否 | 可配置"lossy"或者"lossless" | png图片压缩类型参数:"lossy"为压缩png采用有损压缩模式,"lossless"为压缩png采用无损压缩模式,此参数默认为"lossy" |
| pngCompressQuality | 否 | 可配置范围为[0,100] | png图片压缩质量参数:默认为80,建议使用默认即可,此参数为compressPngType为"lossy"时起作用,也就是有损压缩才起作用 |
| convertWebpQuality | 否 | 可配置范围为[0,100] | 图片转为webp的质量参数:默认为75,此参数为谷歌建议的参数,建议不要更改,转换webp有损模式下此参数才起作用 |
| jpegCompressQuality | 否 | 可配置范围为[84,100] | jpg图片压缩质量参数:默认为84 |
| appIconRoundName | 否 | 项目app圆形启动图标的名字,不包括图片扩展名 | 如圆形启动图标为:icon_round.png,这里配置为icon_round |
| appIconName | 是 | 项目app启动图标的名字,不包括图片扩展名 | 如启动图标为:icon.png,这里配置为icon |
图片压缩效果对比
PNG图片
| 原图 | 有损转为webp | 无损转为webp | lossy有损压缩 | lossless无损压缩 |
|---|---|---|---|---|
![]() |
![]() |
![]() |
||
| 50.05k | 15.28k | 30.30k | 13.64k | 42.21k |
jpg图片
| 原图 | 有损转为webp | lossy有损压缩 |
|---|---|---|
![]() |
![]() |
![]() |
| 7.91k | 2.82k | 5.17k |
由于博客园不能上传webp图片,上图webp图片无法正常显示,可到GitHub中查看具体对比
额外说明
插件运行的时候会有相应信息打印出:

安卓对webp图片的支持
安卓不同sdk版本对webp的支持有所不同,具体如下:
sdk<14:不支持webp格式图片
14<= sdk <18:支持webp格式图片,但是不支持有透明通道的 webp格式图片
sdk >=18:有透明通过的webp图片也支持
此外如果想以无损方式将png/jpg图片转为webp,需要的sdk版本最小为18。
ImageOptimization对以上情况都做了适配,你只需放心使用即可
.9.png图片的处理
ImageOptimization插件对.9.png图片不做任何处理,既不转换也不压缩保持原样。
更多细节可到github查看:https://github.com/MISAYAWANGLEI/ImageOptimization
Gradle入门到实战(二) — ImageOptimization安卓图片转换压缩插件的更多相关文章
- Gradle入门到实战(一) — 全面了解Gradle
声明:本文来自汪磊的博客,转载请注明出处 可关注个人公众号,那里更新更及时,阅读体验更好: 友情提示由于文章是从个人公众号拷贝过来整理的,发现图片没有正常显示,没关注公众号的同学可通过如下链接查看: ...
- webpack入门和实战(二):全面理解和运用loader和plugins
您的阅读目录: 一.理解webpack加载器loader 二.理解less-loader加载器的使用 三.理解babel-loader加载器的使用 四.webpack命令行常见使用的操作 五.用web ...
- uni-app开发经验分享二十一: 图片滑动解锁插件制作解析
在开发用户模块的时候,相信大家都碰到过一个功能,图片滑动解锁后发送验证码,这里分享我用uni-app制作的一个小控件 效果如下: 需要如下图片资源 template <template> ...
- webpack入门和实战(一):webpack配置及技巧
一.全面理解webpack 1.什么是 webpack? webpack是近期最火的一款模块加载器兼打包工具,它能把各种资源,例如JS(含JSX).coffee.样式(含less/sass).图片等都 ...
- iOS 使用AFN 进行单图和多图上传 摄像头/相册获取图片,压缩图片
图片上传时必要将图片进行压缩,不然会上传失败 首先是同系统相册选择图片和视频.iOS系统自带有UIImagePickerController,可以选择或拍摄图片视频,但是最大的问题是只支持单选,由于项 ...
- apollo入门demo实战(二)
1. apollo入门demo实战(二) 1.1. 下载demo 从下列地址下载官方脚本和官方代码 https://github.com/nobodyiam/apollo-build-scripts ...
- Docker从入门到实战(二)
Docker从入门到实战(二) 一:什么是docker Docker是一个开源的应用容器引擎,开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到主流的Linux.MacOS.Windo ...
- Sping Boot入门到实战之入门篇(二):第一个Spring Boot应用
该篇为Spring Boot入门到实战系列入门篇的第二篇.介绍创建Spring Boot应用的几种方法. Spring Boot应用可以通过如下三种方法创建: 通过 https://start.spr ...
- Python 简单入门指北(二)
Python 简单入门指北(二) 2 函数 2.1 函数是一等公民 一等公民指的是 Python 的函数能够动态创建,能赋值给别的变量,能作为参传给函数,也能作为函数的返回值.总而言之,函数和普通变量 ...
随机推荐
- DevOps之四 Jenkins的安装与配置
CentOS 上 Jenkins 安装 一.添加yum repos,然后安装 sudo wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins ...
- self,和类实例化加不加括号的理解
# class Dog(object): # def talk(self): # print('汪汪~~~') # print(self) # self就是对象,默认将对象传递到类方法,self不需要 ...
- 【转】asp.net获取当前页面的url地址
设当前页完整地址是:http://www.jb51.net/aaa/bbb.aspx?id=5&name=kelli "http://"是协议名 "www.jb5 ...
- 可能是史上最全的机器学习和Python(包括数学)速查表
新手学习机器学习很难,就是收集资料也很费劲.所幸Robbie Allen从不同来源收集了目前最全的有关机器学习.Python和相关数学知识的速查表大全.强烈建议收藏! 机器学习有很多方面. 当我开始刷 ...
- 基于java的ES开发
3.1 环境配置 Jdk 1.8及以上 Elasticsearch.client 5.5.2(与服务器版本一致) Log4j 2.7及以下 maven工程必要的jar包依赖 <project x ...
- Nginx虚拟主机
[root@Nginx-server ~]# tar zxvf nginx-1.11.2.tar.gz [root@Nginx-server ~]# useradd -M -s /sbin/nolog ...
- ps命令手册
LINFO ps命令 在PS(即,处理状态)命令被用来提供关于当前正在运行的信息的过程,包括它们的过程标识号(PID)来. 过程也称为任务,是程序的执行(即运行)实例.系统为每个过程分配一个唯一的 ...
- 一个很有趣的示例Spring Boot项目,使用Giraphe CMS和Spring Boot
6: 这是一个很有趣的示例Spring Boot项目,使用Giraphe CMS和Spring Boot. Giraphe是基于Spring Boot的CMS框架. https://github.co ...
- 在线OJ的小demo
牛课网OJ规则 用readLine()代替read_line() 用readLine()代替read_line() 用readLine()代替read_line() 用readLine()代替read ...
- Javascript 进阶 面向对象编程 继承的一个例子
Javascript的难点就是面向对象编程,上一篇介绍了Javascript的两种继承方式:Javascript 进阶 继承,这篇使用一个例子来展示js如何面向对象编程,以及如何基于类实现继承. 1. ...





