一鍵解決Android項目圖片壓縮煩惱,爲apk瘦身!

ImgCompressPlugin

一款Android端自動化圖片壓縮的gradle插件,一鍵掃描項目中的資源目錄並進行批量圖片壓縮,提供3種壓縮方式,支持有損及無損壓縮.同時會記錄已壓縮的文件,適合我的及團隊協同使用.git

github地址:github.com/duking666/I…github

解決的場景

  • 須要對apk體積瘦身的應用
  • 解決逐個手動壓縮的繁雜過程,一鍵點擊便可解決
  • 項目中曾經不慎引入了沒壓縮過的圖片但沒發現.怎麼破?ImgCompressPlugin幫你解決!
  • UI童鞋給予的設計圖大小感受像壓縮過,但實際可能沒有,那我到底是該手動壓縮一下仍是偷偷懶直接放項目中呢?ImgCompressPlugin幫你解決!
  • 團隊版本迭代過程當中,多人協同開發,如何避免重複壓縮致使的失真,怎麼肯定圖片已經被其餘童鞋壓縮過呢?ImgCompressPlugin幫你解決!

如何使用

第一步:在Project的build.gradle文件中:web

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        ...
        classpath 'com.kingkingdu.plugin:img-compressor:1.1.5'
    }
}
...
...
//圖片壓縮插件配置,後文有對配置信息介紹
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,雙擊便可執行,等待壓縮結果便可 json

gradle_guide

配置信息

  • 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
原圖
tiny
pngquant
zopflip

如何選擇合適的壓縮方式

  • 若是項目自己原先使用的壓縮方式與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文件,記錄了已壓縮的圖片信息bash

  • 經過Android studio自帶的版本控制對比壓縮先後圖片是否失真,將失真圖片(通常不多)加入白名單中,同時revert恢復原圖app

  • image-compressed-info.json文件加入到版本控制,提交修改後的圖片及json文件ide

  • 在後續的版本開發中,團隊中的任何人在開發過程當中加入任何圖片,或者等版本提測後,執行一次task便可壓縮新版本引入的圖片,舊版本的圖片保持不變,也不會出現團隊成員重複壓縮的狀況工具

  • 建議團隊中一位童鞋專門處理圖片壓縮便可,無需全部人都懂得使用.也避免了json文件衝突問題.組件化

問題解答

  • Q1:若是在後續版本迭代過程當中,已壓縮的圖片替換成新的圖片,會不會忘記壓縮了?
  • 答:不會.插件自己會經過MD5進行校驗,而不是圖片命名進行校驗,故新圖片也會執行壓縮的
  • Q2:支持的圖片格式有哪些?
  • 答:支持png,jpg格式,webp暫時不支持
  • Q3:對於組件化項目存在多個module,是否會掃描全部的module?
  • 答:會所有掃描,只要是application類型或者Android library類型都會被掃描到

最後

此插件已在筆者團隊中線上使用,效果不錯. 最後,附上項目開源地址:github.com/duking666/I… 歡迎star和fork,歡迎廣大網友爲項目貢獻代碼或提出issue,謝謝

相關文章
相關標籤/搜索