上一篇我们了解了Gradle的各个方面,本篇介绍一款安卓图片优化转换插件,目前已在项目中使用,可一键批量转换压缩图片,webp转换与png/jpg压缩就是那么简单

GitHub项目地址:ImageOptimization

ImageOptimization

安卓图片优化插件:能有效减少apk安装包大小,支持png/jpg转为webp,支持png图片有损无损压缩,支持jpg有损压缩

支持的os

macOSwindows10上已经测试通过,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安卓图片转换压缩插件的更多相关文章

  1. Gradle入门到实战(一) — 全面了解Gradle

    声明:本文来自汪磊的博客,转载请注明出处 可关注个人公众号,那里更新更及时,阅读体验更好:  友情提示由于文章是从个人公众号拷贝过来整理的,发现图片没有正常显示,没关注公众号的同学可通过如下链接查看: ...

  2. webpack入门和实战(二):全面理解和运用loader和plugins

    您的阅读目录: 一.理解webpack加载器loader 二.理解less-loader加载器的使用 三.理解babel-loader加载器的使用 四.webpack命令行常见使用的操作 五.用web ...

  3. uni-app开发经验分享二十一: 图片滑动解锁插件制作解析

    在开发用户模块的时候,相信大家都碰到过一个功能,图片滑动解锁后发送验证码,这里分享我用uni-app制作的一个小控件 效果如下: 需要如下图片资源 template <template> ...

  4. webpack入门和实战(一):webpack配置及技巧

    一.全面理解webpack 1.什么是 webpack? webpack是近期最火的一款模块加载器兼打包工具,它能把各种资源,例如JS(含JSX).coffee.样式(含less/sass).图片等都 ...

  5. iOS 使用AFN 进行单图和多图上传 摄像头/相册获取图片,压缩图片

    图片上传时必要将图片进行压缩,不然会上传失败 首先是同系统相册选择图片和视频.iOS系统自带有UIImagePickerController,可以选择或拍摄图片视频,但是最大的问题是只支持单选,由于项 ...

  6. apollo入门demo实战(二)

    1. apollo入门demo实战(二) 1.1. 下载demo 从下列地址下载官方脚本和官方代码 https://github.com/nobodyiam/apollo-build-scripts ...

  7. Docker从入门到实战(二)

    Docker从入门到实战(二) 一:什么是docker Docker是一个开源的应用容器引擎,开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到主流的Linux.MacOS.Windo ...

  8. Sping Boot入门到实战之入门篇(二):第一个Spring Boot应用

    该篇为Spring Boot入门到实战系列入门篇的第二篇.介绍创建Spring Boot应用的几种方法. Spring Boot应用可以通过如下三种方法创建: 通过 https://start.spr ...

  9. Python 简单入门指北(二)

    Python 简单入门指北(二) 2 函数 2.1 函数是一等公民 一等公民指的是 Python 的函数能够动态创建,能赋值给别的变量,能作为参传给函数,也能作为函数的返回值.总而言之,函数和普通变量 ...

随机推荐

  1. Python 基础【一】

    python运行流程 一.变量及注释 命名: 合法-变量名由字母.数字和下划线组成,并且不能以数字开头.以下保留字不可以当变量名: ['False', 'None', 'True', 'and', ' ...

  2. 高通调试 SPI 屏的 bug

    1. spi调试问题: 问题描述: spi屏幕lk启动的时候正常出现小企鹅,到kernel启动的过程黑屏并且花屏才到开机动画: 2. 黑屏的三个阶段: 参照:黑屏分析 分析开机过程黑屏,首先需要定位黑 ...

  3. Codeforces Round #483 (Div. 2) D. XOR-pyramid

    D. XOR-pyramid time limit per test 2 seconds memory limit per test 512 megabytes input standard inpu ...

  4. 微信小程序AES解密失败

    微信小程序分享群获取群id时后端接口返回"微信AES解密失败",后来定位到原因是服务端用于解密的session_key失效.用户获取到openID存在缓存后,就不会每次login获 ...

  5. linux中查看和开放端口

    装好Tomcat7后,发现除了本机能访问外界访问不了,岂有此理.于是请教百度大神,在费一番周折后,总结步骤如下: 1.修改文件/etc/sysconfig/iptables [root@bogon ~ ...

  6. sql优化总结

    在项目前期目标是确保功能能够正常运行,但是随着时间的推移,数据的增加,逻辑的复杂,导致数据查询会越来越慢,这个时候我们首先想到的应该就是尽量优化sql. sql优化常见注意点: 1.对查询进行优化,应 ...

  7. ECS上搭建Docker(CentOS7)

    本文讲述Docker在CentOS系统上的部署过程.Ubuntu系统下安装docker,您可以点击此处查看.更多详细的实践您可以参考docker实践文档 适用对象 适用于熟悉Linux操作系统,刚开始 ...

  8. spring的依赖注入是什么意思

    最近学习spring框架,对依赖注入有些模糊,遂上网翻阅资料,做了下列总结,原博客为CSDN 南夏的 spring的依赖注入是什么意思,侵删! Spring 能有效地组织J2EE应用各层的对象.不管是 ...

  9. python 产生token及token验证

    1.前言 最近在做微信公众号开发在进行网页授权时,微信需要用户自己在授权url中带上一个类似token的state的参数,以防止跨站攻击.在经过再三思考之后,自己试着实现一个产生token和验证tok ...

  10. selenium获取元素后用click()点击没有作用,用Keys.ENTER就可以成功

    selenium获取元素后用click()点击没有作用,用键盘输入enter(Keys.ENTER)就可以成功 #coding = utf-8 from selenium import webdriv ...