動機
ウェブサイトを作っていると、「のせる画像のサイズを制限したい」という欲望に駆られることが多いですが、コマンドラインで一つづつ圧縮していくのはめんどかったりします。
しかし、圧縮率とかを間違えて圧縮しすぎても困ります。ということでコピペに便利そうなワンライナーを書きました。
注意
使用しているコマンドは不可逆な変化を引き起こすので、gitでコミットするなりバックアップとるなりしてください。
また、画像以外の大きなファイルがあった場合は変な動作をするかもしれません。
本体
size=290 && ratio=99 && cmd='find . -size +'${size}'k' && while true; do string=`${cmd}` && array=(${string// / }) && if [ ${#array[@]} = 0 ];then break;fi && echo "----${#array[@]} file is over the size----" && for v in "${array[@]}";do echo $v; mogrify -resize ${ratio}% $v; done ; echo '';done
解説
仕組みとしては、size
を超えるサイズの画像をratio
に定められた割合だけmogrify
で少しずつ画像のサイズを小さくしていき、size
を超えるサイズの画像がなくなるまで繰り返すというものです。なくなった場合は止まります。
ループだったり文字列を配列に分割しているあたりは自分で調べてみてください。いい勉強になると思います。
ratio
を100に近づけることで、size
に近いサイズにすることができますが当然その分だけ時間がかかるのでそれに注意して数字を決めてください。まあ困ることは無いと思います。