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 相关文章推荐
浅谈什么是SpringBoot异常处理自动配置的原理
Jun 21 Java/Android
详解Java线程池是如何重复利用空闲线程的
Jun 26 Java/Android
spring项目中切面及AOP的使用方法
Jun 26 Java/Android
分析JVM源码之Thread.interrupt系统级别线程打断
Jun 29 Java/Android
详解Java ES多节点任务的高效分发与收集实现
Jun 30 Java/Android
Java Kafka 消费积压监控的示例代码
Jul 01 Java/Android
SpringRetry重试框架的具体使用
Jul 25 Java/Android
SpringBoot整合Minio文件存储
Apr 03 Java/Android
Java GUI编程菜单组件实例详解
Apr 07 Java/Android
引用计数法和root搜索算法以及JVM中判定对象需要回收的方法
Apr 19 Java/Android
Android studio 简单计算器的编写
May 20 Java/Android
MyBatis在注解上使用动态SQL方式(@select使用if)
Jul 07 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
Yii2中OAuth扩展及QQ互联登录实现方法
2016/05/16 PHP
thinkPHP中volist标签用法示例
2016/12/06 PHP
SWFObject Flash js调用类
2008/07/08 Javascript
js判断浏览器类型的方法
2013/08/07 Javascript
纯js实现遮罩层效果原理分析
2014/05/27 Javascript
使用jQuery管理选择结果
2015/01/20 Javascript
JS实现自适应高度表单文本框的方法
2015/02/25 Javascript
Javascript实现div的toggle效果实例分析
2015/06/09 Javascript
JavaScript人脸识别技术及脸部识别JavaScript类库Tracking.js
2015/09/14 Javascript
JS代码实现根据时间变换页面背景效果
2016/06/16 Javascript
AngularJS中实现动画效果的方法
2016/07/28 Javascript
微信小程序开发实战教程之手势解锁
2016/11/18 Javascript
浅谈js script标签中的预解析
2016/12/30 Javascript
Vue.js列表渲染绑定jQuery插件的正确姿势
2017/06/29 jQuery
使用Bootstrap + Vue.js实现表格的动态展示、新增和删除功能
2017/11/27 Javascript
node.js支持多用户web终端实现及安全方案
2017/11/29 Javascript
微信小程序wx.uploadfile 本地文件转base64的实现代码
2018/06/28 Javascript
JS动画实现回调地狱promise的实例代码详解
2018/11/08 Javascript
微信小程序实现用table显示数据库反馈的多条数据功能示例
2019/05/07 Javascript
js Math数学简单使用操作示例
2020/03/13 Javascript
[27:02]2014 DOTA2国际邀请赛中国区预选赛 5 23 CIS VS LGD第三场
2014/05/24 DOTA
[02:37]2018DOTA2亚洲邀请赛赛前采访-EG篇
2018/04/03 DOTA
python numpy 一维数组转变为多维数组的实例
2018/07/02 Python
Django 多语言教程的实现(i18n)
2018/07/07 Python
python opencv旋转图像(保持图像不被裁减)
2018/07/26 Python
python单例模式获取IP代理的方法详解
2018/09/13 Python
浅谈django rest jwt vue 跨域问题
2018/10/26 Python
python简易实现任意位数的水仙花实例
2018/11/13 Python
利用python修改json文件的value方法
2018/12/31 Python
PyQt5基本控件使用详解:单选按钮、复选框、下拉框
2019/08/05 Python
Pytorch中index_select() 函数的实现理解
2019/11/19 Python
Auchan Direct波兰:欧尚在线杂货店
2016/10/19 全球购物
过程装备与控制工程专业个人的求职信
2013/12/01 职场文书
汽车专业学生自我评价
2014/01/19 职场文书
关于工作时间玩手机的检讨书
2014/09/18 职场文书
mysq启动失败问题及场景分析
2021/07/15 MySQL