背景:
移動端憨攒,我們的項目中會用到很多的本地圖片,而這些圖片在一定程度上會影響我們打出包的大小阀参,我們肯定是希望我們本地的圖片越小越好肝集,但是前提是不能失真。
日常壓縮圖片工具
UI切完圖之后蛛壳,我一般會用TinyPNG將圖片進行壓縮一下然后再加進項目
TinyPNG使用智能有損壓縮技術(shù)來減少PNG文件的文件大小杏瞻。通過有選擇地減少圖像中的顏色數(shù)量,存儲數(shù)據(jù)所需的字節(jié)數(shù)就會減少衙荐。效果是幾乎看不見的捞挥,壓縮大小差異很明顯!
壓縮的效果是杠杠的,而且肉眼感覺不到失真忧吟,并且一個圖片進行重復(fù)壓縮砌函,會發(fā)現(xiàn)最終壓不動了,還是挺不錯的溜族。
在線圖片壓縮網(wǎng)站的缺點
最多20張圖片讹俊,每張最大5M
我們的項目至少得百張以上吧,如果20張20張的搞煌抒,挺麻煩的劣像,而且還涉及到目錄的問題<需要把最后的一層一個個擇出來,并且壓縮完摧玫,再搞回去>
以上的網(wǎng)站壓縮方式耳奕,只適合UI給到開發(fā)幾張圖,當下就進行壓縮诬像,然后搞到項目屋群,不適合批量壓縮。
批量壓縮流程
tinypng不僅提供了網(wǎng)頁在線壓縮坏挠,還支持工具壓縮
工具壓縮芍躏,一次性免費壓縮500張,如果有一次性壓縮大于500張的需求降狠,是需要收費的
https://tinypng.com/developers
那么对竣,tinypng如何保證你不會壓縮超過500張呢?
用郵箱申請一個key榜配,這個key在壓縮的時候能統(tǒng)計你壓縮的張數(shù)
換句話說否纬,一個郵箱一個月可以免費壓縮500張圖片一次。
如果真有大于500張壓縮需求蛋褥,多申請幾個key临燃,分批壓縮不就可以了??
大體套路已經(jīng)清楚了,接下來使用他的工具
工具篇
他支持的平臺還是很多的
Ruby, PHP, Node.js, Python, Java, .NET, WordPress plugin
這里我們用Python
https://tinypng.com/developers/reference/python
1.1、安裝相關(guān)的包
pip3 install --upgrade tinify
tinify如果安裝失敗膜廊,參考http://www.reibang.com/p/3c71b9be3a51乏沸。我安裝失敗了,源的事兒爪瓜。
1.2蹬跃、tinify 使用
import tinify
# YOUR_API_KEY 就是上面我們申請的key
tinify.key = "YOUR_API_KEY"
source = tinify.from_file("unoptimized.jpg")
source.to_file("optimized.jpg")
就是上面簡單的幾句話,可以用來壓縮一張圖片。我們需要的是批量操作
那就是根據(jù)目錄查找所有要壓縮的圖片铆铆,蹂躪這個方法了炬转。
自定義腳本
這里寫了兩個Python腳本
FindAllImages.py
用來分析文件構(gòu)成,當前文件大小算灸,文件數(shù)量,圖片數(shù)量<看看key對應(yīng)的壓縮數(shù)量還夠不夠用??>驻啤,png數(shù)量菲驴,jpg數(shù)量,異常文件等...
主要目的是為了給壓縮后的結(jié)果進行對比骑冗,別壓縮完了發(fā)現(xiàn)文件數(shù)量不一致了赊瞬,這個就尷尬了
python3 FindAllImages.py -f /Users/a58/Desktop/Tools/TestFile
參數(shù)說明:
-f 要檢測的文件路徑
CompressImages.py
這個腳本主要是用來壓縮的,在壓縮之前會先調(diào)用上面的FindAllImages.py腳本贼涩,先了解文件組成情況巧涧,然后詢問用戶是否繼續(xù)。
為啥要詢問呢遥倦,主要是如果要壓縮的文件中存在其他的類型文件谤绳,需要處理的話,可以臨時中斷處理袒哥,處理完了在進行壓縮缩筛。和key對應(yīng)的文件數(shù)量夠不夠用的,不夠就分批進行堡称。
python3 CompressImages.py -k jSrjT94QC4f4Sdqn0JFTrclj2tbXxWh3 -f /Users/a58/Desktop/Tools/TestFile -t /Users/a58/Desktop/Tools/FinalFile
參數(shù)說明:
-k tinify平臺申請的key
-f 要壓縮的文件路徑<對于iOS項目來說瞎抛,就可以直接把Assets.xcassets扔進去了>
-t 壓縮文件存儲路徑
如果要進行檢測壓縮一條龍,直接運行 CompressImages.py即可
最終實現(xiàn)效果
壓縮文件對象
1却紧、直接使用上面的腳本壓縮【Assets.xcassets】下的圖片
2桐臊、項目中bundle中的圖片,單獨的壓縮
3晓殊、項目中存在的圖片断凶,通過腳本進行查找,單獨壓縮
真實項目壓縮效果:壓縮前 12.4MB 壓縮后 5.4M
腳本地址