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 的函数能够动态创建,能赋值给别的变量,能作为参传给函数,也能作为函数的返回值.总而言之,函数和普通变量 ...
随机推荐
- Flask快速入门
flask快速入门 1.1.三种框架比较 Django: 重武器,内部包含了非常多组件:ORM.Form.ModelForm.缓存.Session.中间件.信号等 Flask:短小精悍,内部没有太多组 ...
- Python之路,进程、线程、协程篇
本节内容 进程.与线程区别 cpu运行原理 python GIL全局解释器锁 线程 语法 join 线程锁之Lock\Rlock\信号量 将线程变为守护进程 Event事件 queue队列 生产者 ...
- 为什么要使用ThreadLocalRandom代替Random生成随机数
799 java里有伪随机型和安全型两种随机数生成器,伪随机生成器根据特定公式将seed转换成新的伪随机数据的一部分,安全随机生成器在底层依赖到操作系统提供的随机事件来生成数据. 安全随机生成器 需要 ...
- 人工智能之基于face_recognition的人脸检测与识别
不久乘高铁出行,看见高铁火车站已经实现了"刷脸进站",而且效率很高,很感兴趣,今天抽时间研究一下,其实没那么复杂. 我基本上是基于https://github.com/ageitg ...
- KVM内核文档阅读笔记
KVM在内核中有丰富的文档,位置在Documentation/virtual/kvm/. 00-INDEX:整个目录的索引及介绍文档. api.txt:KVM用户空间API,所谓的API主要是通过io ...
- 写完批处理脚本,再写个Gradle脚本,解放双手
前言 上一篇写个批处理来帮忙干活---遍历&字符串处理中,我们已经学习如何写批处理脚本来帮我们做一些简单的重复性工作,本篇继续来学习如何用 Gradle 写脚本,让它也来帮我们干活 Gradl ...
- sql语句的一些案列!
http://www.cnblogs.com/skynet/archive/2010/07/25/1784892.html
- Java Script 学习笔记 (二) Casper JS
1. click() VS mouse.click() 在写自动化脚本要勾选一个复选框时,用casper.mouse.click() 无法选上这个checkbox, 需要用到casper.click( ...
- CopyOnWriteArraySet简介
基于CopyOnWriteArrayList实现,线程安全无需集合. add调用的是CopyOnWriteArraylist的addIfAbsent方法. CopyOnWriteArraySet每次a ...
- BZOJ1467_Pku3243 clever Y_EXBSGS
BZOJ1467_Pku3243 clever Y_EXBSGS Description 小Y发现,数学中有一个很有趣的式子: X^Y mod Z = K 给出X.Y.Z,我们都知道如何很快的计算K. ...





