最近需要優(yōu)化程序大小什往,想著先從圖片資源入手软能,正好有一個圖片壓縮網(wǎng)站 https://tinypng.com/迎捺。因此寫了個shell腳本實現(xiàn)掃描需要壓縮的圖片并且上傳到該網(wǎng)站壓縮并下載壓縮后的圖片功能。
-
首先需要登錄該壓縮網(wǎng)站獲取一個API Key
創(chuàng)建一個compress.sh文件查排,并把下面的內(nèi)容復(fù)制粘貼
#sh compress.sh directory size
#for example: sh compress.sh . +50k
#默認(rèn)directory為當(dāng)前目錄凳枝、size為+50k
size=$2
#if [[ size="" ]]; then
# size=+50k
#fi
directory=$1
#if [[ directory="" ]]; then
# directory=.
#fi
result=$(find $directory \( -path '*/build' -prune -o -path '*/Docs' -prune \) -o \( -name *.png -o -name *.jpg \) -size $size -print)
function compress {
YOUR_API_KEY=abcdefghijklmnopqrstuvwxyz012345...
pic_path=$1
echo " start compress for $pic_path "
result=$(curl https://api.tinify.com/shrink \
--user api:$YOUR_API_KEY \
--data-binary @$pic_path)
# result="{"input":{"size":69178,"type":"image/png"},"output":{"size":22121,"type":"image/png","width":720,"height":1500,"ratio":0.3198,"url":"https://api.tinify.com/output/8j7tr7mkygc0je25gf5ag792ekd6jt48"}}"
# grep -P 'http[^"]*"' $result -o
pic_url=$(echo $result | sed 's/.*\(http[^"}]*\).*/\1/g')
# pic_path=./screen.png
#https://api.tinify.com/output/8j7tr7mkygc0je25gf5ag792ekd6jt48
# echo $pic_url
curl $pic_url \
--user api:$YOUR_API_KEY \
--output ${pic_path}.compress
echo " compress success for $pic_path "
}
OLD_IFS="$IFS"
IFS=" "
array=($result)
IFS="$OLD_IFS"
for path in ${array[@]}
do
compress $path
# echo $path #./Module_Base/src/main/res/drawable-xxhdpi/icon_newuser_first_page1.png
done
# echo $result
echo shell =\> finish
- 將獲取的API Key替換compress.sh文件中的abcdefghijklmnopqrstuvwxyz012345...字符串
- 最后就是盡情的使用了
sh compress.sh ${要掃描的目錄} ${大小限制}
比如:sh compress.sh . +50k
表示掃描當(dāng)前文件夾(包括子文件夾)下的所有大小大于50k的jpg和png圖片并壓縮。
可以明顯的看到 pic_login_bg.jpg文件由59077B變?yōu)榱?1957B雹嗦,壓縮率還是很明顯的范舀。
該shell會在當(dāng)前待壓縮圖片的目錄中生成一個 .compress
后綴的壓縮后圖片,如果對壓縮后的圖片滿意了罪,重命名去掉 .compress
后綴即可锭环。
- 注意事項
當(dāng)你想過濾某些文件夾(不必進(jìn)行壓縮,所以都不必需要掃描)泊藕。你可以對源碼的result=$(find $directory \( -path '*/build' -prune -o -path '*/Docs' -prune \) -o \( -name *.png -o -name *.jpg \) -size $size -print)
該行進(jìn)行修改辅辩。
簡單提下,-path '*/build' -prune -o -path '*/Docs' -prune
這一段代碼就是過濾所有 build文件夾和 Docs文件夾下的圖片。