图片扫描、压缩脚本

最近需要优化程序大小,想着先从图片资源入手,正好有一个图片压缩网站 https://tinypng.com/。因此写了个shell脚本实现扫描需要压缩的图片并且上传到该网站压缩并下载压缩后的图片功能。

  1. 首先需要登录该压缩网站获取一个API Key


    获取ApiKey
  2. 创建一个compress.sh文件,并把下面的内容复制粘贴

#sh compress.sh directory size
#for example:    sh compress.sh . +50k
#默认directory为当前目录、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
  1. 将获取的API Key替换compress.sh文件中的abcdefghijklmnopqrstuvwxyz012345...字符串
  2. 最后就是尽情的使用了
    sh compress.sh ${要扫描的目录} ${大小限制}
    比如: sh compress.sh . +50k 表示扫描当前文件夹(包括子文件夹)下的所有大小大于50k的jpg和png图片并压缩。
    image.png

    可以明显的看到 pic_login_bg.jpg文件由59077B变为了41957B,压缩率还是很明显的。
    image.png

该shell会在当前待压缩图片的目录中生成一个 .compress 后缀的压缩后图片,如果对压缩后的图片满意,重命名去掉 .compress 后缀即可。

  1. 注意事项
    当你想过滤某些文件夹(不必进行压缩,所以都不必需要扫描)。你可以对源码的 result=$(find $directory \( -path '*/build' -prune -o -path '*/Docs' -prune \) -o \( -name *.png -o -name *.jpg \) -size $size -print) 该行进行修改。
    简单提下, -path '*/build' -prune -o -path '*/Docs' -prune 这一段代码就是过滤所有 build文件夹和 Docs文件夹下的图片。

你可能感兴趣的:(图片扫描、压缩脚本)