{"id":15056614,"url":"https://github.com/kingkingdu/imgcompressplugin","last_synced_at":"2025-04-10T04:33:30.480Z","repository":{"id":57733088,"uuid":"167162284","full_name":"KingKingDu/ImgCompressPlugin","owner":"KingKingDu","description":"一款Android端自动化图片压缩的gradle插件,一键扫描项目中的资源目录并进行批量图片压缩,提供3种压缩方式,支持有损及无损压缩.同时会记录已压缩的文件,适合个人及团队协同使用.","archived":false,"fork":false,"pushed_at":"2021-11-03T14:17:34.000Z","size":5794,"stargazers_count":112,"open_issues_count":2,"forks_count":14,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-03-24T05:44:09.056Z","etag":null,"topics":["android","compress","gradle","groovy","image","img","java","jpg","plugin","png","pngquant","tiny","zopflip"],"latest_commit_sha":null,"homepage":"","language":"Groovy","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/KingKingDu.png","metadata":{"files":{"readme":"README-zh-rCN.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2019-01-23T10:14:06.000Z","updated_at":"2025-02-28T18:09:48.000Z","dependencies_parsed_at":"2022-09-26T22:11:15.820Z","dependency_job_id":null,"html_url":"https://github.com/KingKingDu/ImgCompressPlugin","commit_stats":null,"previous_names":["duking666/imgcompressplugin"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/KingKingDu%2FImgCompressPlugin","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/KingKingDu%2FImgCompressPlugin/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/KingKingDu%2FImgCompressPlugin/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/KingKingDu%2FImgCompressPlugin/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/KingKingDu","download_url":"https://codeload.github.com/KingKingDu/ImgCompressPlugin/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248157777,"owners_count":21057064,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["android","compress","gradle","groovy","image","img","java","jpg","plugin","png","pngquant","tiny","zopflip"],"created_at":"2024-09-24T21:54:07.661Z","updated_at":"2025-04-10T04:33:30.446Z","avatar_url":"https://github.com/KingKingDu.png","language":"Groovy","readme":"[![Download](https://img.shields.io/badge/download-latestversion-blue.svg)](https://search.maven.org/search?q=duking666) [![License](https://img.shields.io/badge/License-Apache%202.0-orange.svg)](http://www.apache.org/licenses/LICENSE-2.0.html)\n\n### ImgCompressPlugin\n\n* * *\n一款Android端自动化图片压缩插件,`一键`扫描项目中的资源目录并进行批量图片压缩,提供3种压缩方式,支持有损及无损压缩.同时会记录已压缩的文件,适合个人及团队协同使用.\n\n\n### 如何使用\n第一步:在`Project`的build.gradle文件中:\n\n```\nbuildscript {\n    repositories {\n        mavenCentral()\n    }\n    dependencies {\n        ...\n        classpath 'io.github.duking666:ImgCompressPlugin:1.2.1'\n    }\n}\n...\n...\n//图片压缩插件配置\napply plugin: 'img-compressor'\nimgCompressOpt{\n    way=\"pngquant\"\n    test = false\n    whiteFiles=[\"text_pic1.png\",\"test_pic2.jpg\"]\n    minSize=5\n    tinyKeys=[\"your key\"]\n}\n\n```\n第二步:引入后点击`sync now`,gradle配置完毕后会显示下图`imgCompressTask`,双击即可执行,等待压缩结果即可\n![gradle_guide](imgsource/gradle_guide.png)\n\n#### 配置信息\n- `way`:设置压缩的方式,支持3种常见的压缩,\"tinypng\",\"pngquant\",\"zopflip\" 3选1,压缩方式选择及压缩效果见下图\n- `test`:设置测试模式是否开启,false表示压缩后图片直接覆盖原图,true表示会把原图及压缩图输出到测试目录(Project/ImageCompressTest)\n- `whiteFiles`:选填,白名单文件数组,不进行压缩\n- `minSize`:单位为KB,设置原图大于某个数值才触发压缩,0表示全部都压缩\n- `tinyKeys`:选填,仅在way=\"tinypng\"情况下才需要,[tinyKeys申请教程入口](https://github.com/duking666/ImgCompressPlugin/blob/master/Tinykey%20Apply%20Tutorial.md)\n\n\n### 压缩效果\n\n| 原图 | tinypng | pngquant | zopflip |\n| --- | --- | --- | --- |\n| 压缩类型 | 有损 | 有损 | 无损 |\n| 1.3M | 445KB | 542KB |903KB |\n| ![原图](imgsource/test_pic8.png) | ![tiny](imgsource/test_pic8(tiny).png) | ![pngquant](imgsource/test_pic8(pngquant).png) | ![zopflip](imgsource/test_pic8(zopflip).png) |\n\n### 解决的场景\n- 需要对apk体积瘦身的应用\n- 解决逐个手动压缩的繁杂过程,一键点击即可解决\n- 项目中不慎引入没压缩过的图片\n- UI童鞋给予的设计图大小`感觉`像压缩过,但实际并没有\n- 版本迭代中不确定图片是否已经有其他同事压缩过.\n\n### 如何选择合适的压缩方式\n- 如果项目本身原先使用的压缩方式与3种模式之一相同,则way选择相同的方式.\n- 如果原先没有固定的压缩方式,那么推荐使用tiny或者pngquant,相对来说,tiny压缩时间较长,需要去官网申请key,但效果最好.pngquant压缩快速,效果也不错\n\n### 白名单的意义\n- 当进行图片压缩后发现有少量图片失真,则可以加入白名单,避免被压缩\n### 测试模式\n- 适合场景:UI设计师可能需要协助对比压缩后的图片是否失真,但又没项目的代码权限,所以把压缩后的图片放置在一个目录整体打包,发给设计师审阅,当然最便捷的方式是Android studio自带的版本对比工具.\n- 当配置中test=true时,会把原图及压缩后的图输出到测试目录`(Project/ImageCompressTest)`,压缩后的图片命名为`xxxx(test).png`\n- 注意:当测试目录中只存在原图但不存在压缩后的图片时,表示图片已充分压缩,无需再压缩\n\n\n### 最佳实践\n- 引入本插件,配置测试模式test=false,初次执行`imgCompressTask`后,查看log,会打印类似日志:\n    - Task finish, compressed:3 files  skip:3 Files  before total size: 951.50KB after total size: 309.67KB save size: 641.83KB\n    - 通过日志可得知被压缩图片为3个,跳过图片为3个,图片压缩前后的大小比较.图片跳过的原因为图片已充分压缩,无需再压缩\n\n- 执行task后会在project目录下生成image-compressed-info.json文件,记录了已压缩的图片信息\n- 通过Android studio自带的版本控制对比压缩前后图片是否失真,将失真图片(一般很少)加入白名单中,同时revert恢复原图\n- 将image-compressed-info.json文件加入到版本控制,提交修改后的图片及json文件\n- 在后续的版本开发中,团队中的任何人在开发过程中加入任何图片,或者等版本提测后,执行一次task即可压缩新版本引入的图片,旧版本的图片保持不变,也不会出现团队成员重复压缩的情况\n\n### 问题解答\n- Q1:如果在后续版本迭代过程中,已压缩的图片替换成新的图片,会不会忘记压缩了?\n- 答:不会.插件本身会通过MD5进行校验,而不是图片命名进行校验,故新图片也会执行压缩的\n- Q2:支持的图片格式有哪些?\n- 答:支持png,jpg格式,webp暂时不支持\n- Q3:对于组件化项目存在多个module,是否会扫描所有的module?\n- 答:会全部扫描,只要是application类型或者Android library类型都会被扫描到\n\n\n\n### 支持的系统\n在macOS、windows10上测试通过\n\n### 参考\n[chenenyu](https://github.com/chenenyu/img-optimizer-gradle-plugin)\n### License\n\n[Apache 2.0](http://www.apache.org/licenses/LICENSE-2.0.html)\n\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkingkingdu%2Fimgcompressplugin","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkingkingdu%2Fimgcompressplugin","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkingkingdu%2Fimgcompressplugin/lists"}