本文正在参与「金石计划」

我们好,我是小余,平时开发过程中常常会有对图片进行紧缩的需求,往往咱们都是直接去网上找在线软件进行紧缩,可是你要在百度上找一个紧缩软件不是要收费就是要你注册重视什么的,反正就是用的很不舒服,而且不一定到达自己预期作用。所以小余写了一个gradle插件,只要集成这个插件,就能够让咱们在Android Studio中一键对项目中所有的png图片进行紧缩,而且能够依据你设置的参数对图片进行过滤,紧缩后的图片信息还能够在日志文件中检查。

好了,下面咱们进入正题:

img-optimizer

这是一款用于优化png图片的gradle插件,有用削减APK体积,支撑极限紧缩和无损紧缩。

macOSwindows10测试通过,如果有更多需求,请提issue。

怎么运用

在Project的build.gradle文件中:

buildscript {
   repositories {
     maven { url 'https://jitpack.io' }
   }
   dependencies {
     ...
     classpath 'com.github.ByteYuhb:img-oprimizer:v1.0.2'
   }
}

然后在你想要优化的module的build.gradle文件中:

apply plugin: 'com.xiaoyu.imgoptimizer.plugin'

然后在task tree里边就能够看到对应的task:

【开源】解放双手,我开源了一款图片压缩插件

双击即可履行。task的姓名受当时module的命名影响。

支撑的装备项

能够在module的build.gradle文件中增加装备选项,来自界说任务:

optimizerOptions {
   triggerSize  6
   type  "lossless"
   suffix  ""
   fileFilters = ["mmpic.png","aaa.png"]
}
    1. triggerSize 用于过滤图片,小于该值的图片不会进行优化。默以为0,即每张图片都进行优化。
    1. type 优化类型,目前支撑"lossy""lossless""lossy"为极限紧缩(引荐,速度快,紧缩率高),"lossless"为无损紧缩(速度慢,紧缩率低,与原图无差别)。
    1. suffix 优化后的图片后缀。假如装备为"_opter"ic_launcher.png通过优化后,将会生成ic_launcher_opter.png。默以为空,即掩盖原图。
    1. fileFilters支撑过滤文件,对不需要紧缩的图片增加白名单。

作用预览

原图 极限紧缩(lossy) 无损紧缩(lossless)
872K 160K(削减81%) 476K(挨近50%)
【开源】解放双手,我开源了一款图片压缩插件
【开源】解放双手,我开源了一款图片压缩插件
【开源】解放双手,我开源了一款图片压缩插件

说明

如果项目有多个module,请在相应的build.gradle中装备plugin,每个module彼此独立。履行task后会在module根目录下生成log文件,具体记录了每张图片的优化状况,方便检查。

2023-04-19 17:50:03 info:5 images need to be optimized.
----------------------------------------
2023-04-19 17:50:04 info:Succeed! 893160B-->163525B, 81.691414% saved! E:\MyWork\pri\imgOptimizer\app\src\main\res\drawable\atm.png
----------------------------------------
2023-04-19 17:50:05 info:Succeed! 488393B-->163475B, 66.52798% saved! E:\MyWork\pri\imgOptimizer\app\src\main\res\drawable\atm_lossless.png
----------------------------------------
2023-04-19 17:50:05 warn:Skipped! E:\MyWork\pri\imgOptimizer\app\src\main\res\mipmap-xxxhdpi\ic_launcher_round_lossless.png
----------------------------------------
2023-04-19 17:50:05 warn:Skipped! E:\MyWork\pri\imgOptimizer\app\src\main\res\mipmap-xxxhdpi\ic_launcher_round_opt.png
----------------------------------------
2023-04-19 17:50:05 warn:Skipped! E:\MyWork\pri\imgOptimizer\app\src\main\res\mipmap-xxxhdpi\ic_launcher_round_opt_lossless.png
----------------------------------------
2023-04-19 17:50:05 info:Total: 5, Succeed: 2, Skipped: 3, Failed: 0, Saved: 1029.8369140625KB
----------------------------------------

原理

该插件主要是根据**pngquant**以及Google 的 zopfli 东西进行紧缩的,前者能够最大极限的将png图片紧缩到最小,而 zopfli 是一个无损紧缩格式,都是轻量级且高效的东西。更多原理部分我们能够去看源码,有不明白的能够call小余,当然也期待你的重视。

参阅

img-optimizer-gradle-plugin

pngquant.org/

github.com/google/zopf…