bashでImageMagickを使った画像縮小バッチ処理

2011年1月13日

ちょっとした理由で、bashでImageMagickを使った画像縮小バッチ処理を書いた。
perlのImage::Magickを使うのがポピュラーなんだろうけれど、マシンにImageMagickは入れてあるが、Image::Magickモジュールは無いという微妙な状況だったのでbashで書いてみた。ソースは以下のとおり。

#!/bin/bash

size=$(identify $1 | cut -d " " -f 3)
width=$(echo $size | cut -d "x" -f 1)
height=$(echo $size | cut -d "x" -f 2)
if [ $width -gt $height ]; then
  if [ $width -gt 200 ]; then
    ratio=$((20000/$width))%
  else
    ratio=100%
  fi
else
  if [ $height -gt 200 ]; then
    ratio=$((20000/$height))%
  else
    ratio=100%
  fi
fi
convert -geometry $ratio -quality 80 $1 $2
exit 0

resize.sh なんて名前で保存して、実行権限つけて
./resize.sh 縮小前の画像ファイル名 縮小後の画像ファイル名
といった具合で実行する。
上記のソースの例では、縦横大きい方が最大200ピクセルになるように縮小される。ロジックはよくあるもの。

ImageMagickを使うことはたまにあるけれど、大抵はperl上から呼び出している。今回はperlを使えないという一風変わった制限の中での対処となった。画像処理は比較的、負荷が高めなので、バッチで回せるところは出来るだけバッチにしておきたい所。
それだけのためにシェルからperlを呼び出すのであれば、今回のようにシェルの中だけで対応することも可能というサンプル、になっているかな?