TinyPNG 一键脚本

June 11, 2020

公司的前端小伙伴经常需要通过 TinyPNG 将切图素材进行压缩以保证前端页面的加载速度。

在这之前,每次压缩都是枯燥的机械操作:

打开网址 -> 拖动图片进入网站 -> 等待压缩完成 -> 下载压缩包 -> 解压缩 -> 替换静态资源

网站一次性只能压缩 20 张 5MB 以内的图片

所以,应该让程序自动化。

Shell 脚本

公司开发都是 macOS 所以这次我们只需要一个 Shell 脚本。

#!/bin/bash
keys=(XvqD6HrskNd0FqyMdfcQbymGNYmJB8zb SNhNpxDlCNm9VjtxqWQGd9dTyf9jCBRY)

echo -e '\n\033[31m- - - - - - - - - - - - - - - - - - - - - -\033[0m\n'
files=()
for filename in *
do 
    if [[ $filename =~ \.(jpg|png|jpeg)$ ]];then
        files[${#files[*]}]=$filename
    fi
done

echo -e "\033[34m${files[@]}\033[0m"
echo -e '\n是否将以上图片进行压缩?回车以继续 ctl+c 取消'
read -p ''

echo -e '开始压缩,请等待...\n'

for filename in ${files[@]}
do
{
    key=${keys[$RANDOM%${#keys[*]}]}
    rep=`curl https://api.tinify.com/shrink --user api:$key --data-binary '@'${filename} -s`
    [[ $rep =~ url\":\"(.*)\" ]]
    url=${BASH_REMATCH[1]}
    wget -q -O ${filename} ${url}
    echo -e "\033[34m${filename} 已完成\033[0m"
} &
done
wait
echo -e "\n完成"
代码比较简单就不必做注释说明,但使用时要注意以下:

懒人命令

为了更方便大家使用,提供一个线上脚本可一行命令直接使用,脚本内包含约 35 个 Key,每月每 Key 可以压缩 500 张图片,请大家合理使用,避免滥用,谢谢。

bash -c "$(curl -s cdn.huguotao.com/tinypng.sh)"

进入图片目录后执行命令即可

Reference

文章列表评论