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 的函数能够动态创建,能赋值给别的变量,能作为参传给函数,也能作为函数的返回值.总而言之,函数和普通变量 ...
随机推荐
- SAP中的BRF+
即便努力去尝试最小化SAP系统中的自定义内容,大量自定义业务逻辑通常还是无法避免的.在过去,这意味着需要在系统的各种地方引入自定义ABAP代码,包括user-exits,enhancement,BAd ...
- 正则表达式re模块小结
re模块的常用方法 1.compile(pattern[,flags]) 创建模式对象,一般配合其他方法使用.例如: import re #导入re模块 text = 'All that doth f ...
- HTML结构及基础语法
一.HTML结构 <!DOCTYPE html><html lang="en"><head> <meta charset="UT ...
- 微信小程序函数调用监控
微信小程序之无埋点函数调用监控 有时候,面对一个bug,左思右想就是无法理解为什么. 我就有过这样的经历,耗时整个一个晚上,后来还是放弃了.不得不在所有可能的点都加上日志,部署等待再次报错,真的很让人 ...
- javascript中的隐式类型转化
javascript中的隐式类型转化 #隐式转换 ## "+" 字符串和数字 如果某个操作数是字符串或者能够通过以下步骤转换为字符串的话,+将进行拼接操作. 如果其中一个操作数是对 ...
- socket和webService的区别
网络七层协议为:物理层.数据链路层.网络层.传输层.会话层.表示层.应用层 socket 只是 java在网络层定义的类,用来实现网络层.上面的各层需要我们自己在程序里实现. 例如端口可以自己定义 . ...
- ExecutorCompletionService分析及使用
当我们通过Executor提交一组并发执行的任务,并且希望在每一个任务完成后能立即得到结果,有两种方式可以采取: 方式一: 通过一个list来保存一组future,然后在循环中轮训这组future,直 ...
- 使用SimHash进行海量文本去重[转载]
阅读目录 1. SimHash与传统hash函数的区别 2. SimHash算法思想 3. SimHash流程实现 4. SimHash签名距离计算 5. SimHash存储和索引 6. SimHas ...
- jquery input 搜索自动补全、typeahead.js
最近做个一个功能需要用到自动补全,然后在网上找了很久,踩了各种的坑 最后用typeahead.js这个插件,经过自己的测试完美实现 使用方法:在页面中引入jquery.jquery.typeahead ...
- call(),apply()方法解析(一)
1.call()和apply()的作用是改变this指向,区别是传参列表不同(前者连续参数,后者为参数数组) 2.方法定义: function.apply(thisObj[, argArray]) f ...





