AndroidStudio图片压缩工具ImgCompressPlugin使用实例


Posted in Java/Android onAugust 05, 2022

正文

项目中集成了TinyPng,500张免费 几个key轮流使用 非常方便However,最近发现总是报错

Caused by: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

看到官网,2016年之后,已不再维护,只能转向新的压缩工具了。

于是集成ImgCompressPlugin

如何使用

在project的build.gradle中添加:

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        ...
        classpath 'com.kingkingdu.plugin:img-compressor:1.1.5'
    }
}
...

在Module的build.gradle文件:配置插件的设置

apply plugin: 'img-compressor'
repositories {
    google()
    maven { url "https://jitpack.io" }
}
imgCompressOpt{
    way="pngquant"
    test = false
    whiteFiles=["text_pic1.png","test_pic2.jpg"]
    minSize=5
    tinyKeys=["your key"]
}
dependencies {
    ....
    implementation fileTree(include: ['*.jar'], dir: 'libs')
    ....
}

点击Sync Now ,点击AS右侧Gradle找到image--imgCompressTask 双击即可执行压缩。

AndroidStudio图片压缩工具ImgCompressPlugin使用实例

配置信息

  • way:设置压缩的方式,支持3种常见的压缩,"tinypng","pngquant","zopflip" 3选1,压缩方式选择及压缩效果见下图
  • test:设置测试模式是否开启,false表示压缩后图片直接覆盖原图,true表示会把原图及压缩图输出到测试目录(Project/ImageCompressTest)
  • whiteFiles:选填,白名单文件数组,不进行压缩
  • minSize:单位为KB,设置原图大于某个数值才触发压缩,0表示全部都压缩
原图 tinyPng pngquant zopflip
压缩类型 有损 有损 无损
1.3M 445K 542K 903K

如何选择合适的压缩方式

  • 如果项目本身原先使用的压缩方式与3种模式之一相同,则way选择相同的方式.
  • 如果原先没有固定的压缩方式,那么推荐使用tiny或者pngquant,相对来说,tiny压缩时间较长,需要去官网申请key,但效果最好.pngquant压缩快速,效果也不错(但是tiny 目前不能用了on 2021.12.16)

最佳实践

引入本插件,配置测试模式test=false,初次执行imgCompressTask后,查看log,会打印类似日志:

AndroidStudio图片压缩工具ImgCompressPlugin使用实例

压缩日志

通过日志可得知被压缩图片为Succeed,跳过图片为Skipped,图片压缩前后的大小比较。图片跳过的原因为图片已充分压缩,无需再压缩执行task后会在project目录下生成image-compressed-info.json文件,记录了已压缩的图片信息

AndroidStudio图片压缩工具ImgCompressPlugin使用实例

通过Android studio自带的版本控制对比压缩前后图片是否失真,将失真图片(一般很少)加入白名单中,同时revert恢复原图

将image-compressed-info.json文件加入到版本控制,提交修改后的图片及json文件

在后续的版本开发中,团队中的任何人在开发过程中加入任何图片,或者等版本提测后,执行一次task即可压缩新版本引入的图片,旧版本的图片保持不变,也不会出现团队成员重复压缩的情况。

问题解答

Q1:如果在后续版本迭代过程中,已压缩的图片替换成新的图片,会不会忘记压缩了?答:不会.插件本身会通过MD5进行校验,而不是图片命名进行校验,故新图片也会执行压缩的Q2:支持的图片格式有哪些?答:支持png,jpg格式,webp暂时不支持Q3:对于组件化项目存在多个module,是否会扫描所有的module?答:会全部扫描,只要是application类型或者Android library类型都会被扫描到(实测并不是全部扫描)

项目地址

https://gitee.com/Li_Shuaihua/ImgCompressPlugin/#/Li_Shuaihua/ImgCompressPlugin/blob/master/README-zh-rCN.md

以上就是AndroidStudio图片压缩工具ImgCompressPlugin使用实例的详细内容,更多关于AndroidStudio图片压缩的资料请关注三水点靠木其它相关文章!

Java/Android 相关文章推荐
SpringCloud Alibaba 基本开发框架搭建过程
Jun 13 Java/Android
如何解决springcloud feign 首次调用100%失败的问题
Jun 23 Java/Android
Java多条件判断场景中规则执行器的设计
Jun 26 Java/Android
Netty结合Protobuf进行编解码的方法
Jun 26 Java/Android
Java 中的 Unsafe 魔法类的作用大全
Jun 26 Java/Android
JavaGUI模仿QQ聊天功能完整版
Jul 04 Java/Android
idea以任意顺序debug多线程程序的具体用法
Aug 30 Java/Android
Java使用Unsafe类的示例详解
Sep 25 Java/Android
java后台调用接口及处理跨域问题的解决
Mar 24 Java/Android
java中如何截取字符串最后一位
Jul 07 Java/Android
AndroidStudio图片压缩工具ImgCompressPlugin使用实例
Aug 05 Java/Android
Java Redisson多策略注解限流
Sep 23 Java/Android
Java代码规范与质量检测插件SonarLint的使用
Aug 05 #Java/Android
Spring boot admin 服务监控利器详解
Aug 05 #Java/Android
volatile保证可见性及重排序方法
Aug 05 #Java/Android
app场景下uniapp的扫码记录
Jul 23 #Java/Android
IDEA中sout快捷键无效问题的解决方法
Jul 23 #Java/Android
Spring Boot 的创建和运行示例代码详解
阿里面试Nacos配置中心交互模型是push还是pull原理解析
Jul 23 #Java/Android
You might like
PHP 日常开发小技巧
2009/09/23 PHP
PHP chmod 函数与批量修改文件目录权限
2010/05/10 PHP
PHP实现linux命令tail -f
2016/02/22 PHP
利用PHP获取汉字首字母并且分组排序详解
2017/10/22 PHP
php中的buffer缓冲区用法分析
2019/05/31 PHP
图片按比例缩放函数
2006/06/26 Javascript
utf8的编码算法 转载
2006/12/27 Javascript
在js中单选框和复选框获取值的方式
2009/11/06 Javascript
JQuery扩展插件Validate 2通过参数设置验证规则
2011/09/05 Javascript
精心挑选的12款优秀的基于jQuery的手风琴效果插件和教程
2012/08/22 Javascript
js和jquery设置disabled属性为true使按钮失效
2014/08/07 Javascript
原生JS实现拖拽图片效果
2020/08/27 Javascript
jquery+ajax实现直接提交表单实例分析
2016/06/17 Javascript
Google 地图控件集详解及实例代码
2016/08/06 Javascript
BootStrap轻松实现微信页面开发代码分享
2016/10/21 Javascript
解析JavaScript实现DDoS攻击原理与保护措施
2016/12/26 Javascript
jQuery+Cookie实现切换皮肤功能【附源码下载】
2018/03/25 jQuery
微信小程序登录对接Django后端实现JWT方式验证登录详解
2019/07/29 Javascript
小程序两种滚动公告栏的实现方法
2019/09/17 Javascript
Vue(定时器)解决mounted不能获取到data中的数据问题
2020/07/30 Javascript
[03:03]DOTA2校园争霸赛 济南城市决赛欢乐发奖活动
2013/10/21 DOTA
[01:23:24]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Elephant BO3 第三场 2月7日
2021/03/11 DOTA
python使用marshal模块序列化实例
2014/09/25 Python
Python cookbook(数据结构与算法)保存最后N个元素的方法
2018/02/13 Python
Python 元组拆包示例(Tuple Unpacking)
2019/12/24 Python
django admin管理工具自定义时间区间筛选器DateRangeFilter介绍
2020/05/19 Python
python实现批量命名照片
2020/06/18 Python
Python logging日志库空间不足问题解决
2020/09/14 Python
CSS3中Transform动画属性用法详解
2016/07/04 HTML / CSS
CSS3 优势以及网页设计师如何使用CSS3技术
2009/07/29 HTML / CSS
amazeui页面校验功能的实现代码
2020/08/24 HTML / CSS
美特斯邦威官方商城:邦购网
2016/10/13 全球购物
掌握一个领域知识,高效学习必备方法
2019/08/08 职场文书
Python图像处理之图像拼接
2021/04/28 Python
Django模型层实现多表关系创建和多表操作
2021/07/21 Python
js面向对象编程OOP及函数式编程FP区别
2022/07/07 Javascript