ImgCompressPlugin
一款Android端自動化圖片壓縮的gradle外掛,
一鍵
掃描專案中的資源目錄並進行批量圖片壓縮,提供3種壓縮方式,支援有損及無失真壓縮.同時會記錄已壓縮的檔案,適合個人及團隊協同使用.
github地址:github.com/duking666/I…
解決的場景
- 需要對apk體積瘦身的應用
- 解決逐個手動壓縮的繁雜過程,
一鍵點選
即可解決 - 專案中曾經不慎引入了沒壓縮過的圖片但沒發現.怎麼破?ImgCompressPlugin幫你解決!
- UI童鞋給予的設計圖大小
感覺
像壓縮過,但實際可能沒有,那我究竟是該手動壓縮一下還是偷偷懶直接放專案中呢?ImgCompressPlugin幫你解決! - 團隊版本迭代過程中,多人協同開發,如何避免重複壓縮導致的失真,怎麼確定圖片已經被其他童鞋壓縮過呢?ImgCompressPlugin幫你解決!
如何使用
第一步:在Project
的build.gradle檔案中:
buildscript {
repositories {
jcenter()
}
dependencies {
...
classpath 'com.kingkingdu.plugin:img-compressor:1.1.4'
}
}
...
...
//圖片壓縮外掛配置,後文有對配置資訊介紹
apply plugin: 'img-compressor'
imgCompressOpt{
way="pngquant"
test = false
whiteFiles=["text_pic1.png","test_pic2.jpg"]
minSize=5
tinyKeys=["your key"]
}
複製程式碼
第二步:引入後點選sync now
,gradle配置完畢後會顯示下圖imgCompressTask
,雙擊即可執行,等待壓縮結果即可
配置資訊
way
:設定壓縮的方式,支援3種常見的壓縮,"tinypng","pngquant","zopflip" 3選1,壓縮方式選擇及壓縮效果見下圖test
:設定測試模式是否開啟,false表示壓縮後圖片直接覆蓋原圖,true表示會把原圖及壓縮圖輸出到測試目錄(Project/ImageCompressTest)whiteFiles
:選填,白名單檔案陣列,不進行壓縮minSize
:單位為KB,設定原圖大於某個數值才觸發壓縮,0表示全部都壓縮tinyKeys
:選填,僅在way="tinypng"情況下才需要,tinyKeys申請教程入口
壓縮效果
原圖 | tinypng | pngquant | zopflip |
---|---|---|---|
壓縮型別 | 有損 | 有損 | 無損 |
1.3M | 445KB | 542KB | 903KB |
如何選擇合適的壓縮方式
- 如果專案本身原先使用的壓縮方式與3種模式之一相同,則way選擇相同的方式.
- 如果原先沒有固定的壓縮方式,那麼推薦使用tiny或者pngquant,相對來說,tiny壓縮時間較長,需要去tinyKey官網申請key,教程入口,但效果最好.pngquant壓縮快速,效果也不錯
白名單的意義
- 當進行圖片壓縮後發現有少量圖片失真,則可以加入白名單,避免被壓縮
測試模式
- 適合場景:UI設計師可能需要協助對比壓縮後的圖片是否失真,但又沒專案的程式碼許可權,所以把壓縮後的圖片放置在一個目錄整體打包,發給設計師審閱,當然最便捷的方式是Android studio自帶的版本對比工具.
- 當配置中test=true時,會把原圖及壓縮後的圖輸出到測試目錄
(Project/ImageCompressTest)
,壓縮後的圖片命名為xxxx(test).png
- 注意:當測試目錄中只存在原圖但不存在壓縮後的圖片時,表示圖片已充分壓縮,無需再壓縮
最佳實踐
-
引入本外掛,配置測試模式test=false,初次執行
imgCompressTask
後,檢視log,會列印類似日誌:- Task finish, compressed:3 files skip:3 Files before total size: 951.50KB after total size: 309.67KB save size: 641.83KB
- 通過日誌可得知被壓縮圖片為3個,跳過圖片為3個,圖片壓縮前後的大小比較.圖片跳過的原因為圖片已充分壓縮,無需再壓縮
-
執行task後會在project目錄下生成
image-compressed-info.json
檔案,記錄了已壓縮的圖片資訊 -
通過Android studio自帶的版本控制對比壓縮前後圖片是否失真,將失真圖片(一般很少)加入白名單中,同時revert恢復原圖
-
將
image-compressed-info.json
檔案加入到版本控制,提交修改後的圖片及json檔案 -
在後續的版本開發中,團隊中的任何人在開發過程中加入任何圖片,或者等版本提測後,執行一次task即可壓縮新版本引入的圖片,舊版本的圖片保持不變,也不會出現團隊成員重複壓縮的情況
-
建議團隊中一位童鞋專門處理圖片壓縮即可,無需所有人都懂得使用.也避免了json檔案衝突問題.
問題解答
- Q1:如果在後續版本迭代過程中,已壓縮的圖片替換成新的圖片,會不會忘記壓縮了?
- 答:不會.外掛本身會通過MD5進行校驗,而不是圖片命名進行校驗,故新圖片也會執行壓縮的
- Q2:支援的圖片格式有哪些?
- 答:支援png,jpg格式,webp暫時不支援
- Q3:對於元件化專案存在多個module,是否會掃描所有的module?
- 答:會全部掃描,只要是application型別或者Android library型別都會被掃描到
最後
此外掛已在筆者團隊中線上使用,效果不錯. 最後,附上專案開源地址:github.com/duking666/I… 歡迎star和fork,歡迎廣大網友為專案貢獻程式碼或提出issue,謝謝