画像圧縮・変換 web アプリ “Squoosh” のコマンドラインツール “Squoosh CLI”
概要
"Squoosh CLI" は Web アプリケーションのものと同様に、webp 以外にも jpg (mozjpeg) や、png (oxipng) への相互変換や、リサイズ、画像の回転、色数の減少などの機能を備えており、Linux コマンドと連携することで容易に高いパフォーマンスを持つ画像フォーマットへ、連続的に変換することができます。
以下ではその一例をメモとして残します。
インストール
README にある通り、npm によりグローバルインストールしてください。
npm i -g @squoosh/cli
例
まずは最低限なコマンドを確認。
以下でカレントディレクトリの jpg ファイルを webp に変換します。
※画像以外のファイルを処理しようとするとエラーあるいは、処理が進行しなくなります
squoosh-cli ./*.jpg --webp
以下では、Linux コマンドと、パイプによって組み合わせ、ある基準以上の容量を持つ複数の画像ファイルを、リサイズするとともに jpg(mozjpeg) に変換したい場合を想定しています。
ls -lh |
awk '{ if(int($5) >= 500) print $9 }' |
xargs -I{} \
squoosh-cli \
--mozjpeg '{ quolity: 80 }' \
--resize '{ width: 640 }' \
-d images_dir \
{}
オプションについて
-d <dir>
のように出力先ディレクトリを指定できます。
この時対象のディレクトリが存在しない場合、新しく作られます。
このほか、変換方式を --mozjpeg
のように指定したすぐ後ろに、json 表記で設定を指定しています。
上の例ですと、品質を 80 とした jpeg への変換を、幅 640 ピクセルとしてリサイズします。
詳しいオプションについては codecs.js
を参照してください。
※目当てのオプション、例えば「mozjpeg」をページ検索すると手っ取り早いです
なお、上の例ですと、幅が 640 ピクセル以下のファイルであっても 640 ピクセルに拡大リサイズされてしまいます。
この場合、例えば以下のように identify
コマンドなどを使用して、幅サイズを取得し、さらに対象ファイルを絞り込むことも可能です。
※identify
を使用するためには ImageMagick
をインストールします
ls -1h *.jpg | while read fname
do
size=$(du $fname | cut -f1)
width=$(identify -format "%w" $fname)
# 500kb 以上であるかいなか
if [ $size -ge 500 ]; then
# width が 640 より大きいか否か
if [ $width -gt 640 ]; then
squoosh-cli \
--mozjpeg '{ quolity: 80 }' \
--resize '{ width: 640 }' \
-d images_dir \
$fname
else
squoosh-cli \
--mozjpeg '{ quolity: 80 }' \
-d images_dir \
$fname
fi
fi
done