運営中のサイトで配信しているサムネイル画像を生成する時に ImageMagick を使っている。
普通に ImageMagick を使って画像をリサイズする場合は
$ convert -resize 120x90 src.jpg dst.jpg
と書くと思うのだが、実は結構無駄があることがわかったのでメモ。
1. 爆速でリサイズする
実は今回のようにあらかじめ変換後のサイズが分かっている場合は [-define] オプションをつけるだけで爆速になるそう。
$ convert -define jpeg:size=120x90 -resize 120x90 src.jpg dst.jpg
JPEG ファイルを読み込む時のヒントとしてサイズを与えてやることで効率が良くなるとのこと。
2. 無駄な Exif 情報を削除
サムネイル画像のように、webサイトで配信するような画像では Exif 情報は無駄なので削除したい。
Exif 情報の削除には [-strip] オプションを使えばよい。
$ convert -define jpeg:size=120x90 -strip -resize 120x90 src.jpg dst.jpg
3. リサイズと Exif 情報の削除を一発で行う
調べてみると [-resize] と [-strip] を足し合わせたようなオプション [-thumbnail] が存在していることに気が付いた。
ぶっちゃけ上で書いた方法でも一発で変換できている気がするが、[-resize] と [-strip] を両方書くよりスマートなのでこっちを使うことにした。
$ convert -define jpeg:size=120x90 -thumbnail 120x90 src.jpg dst.jpg
これ内部的には何か差があるのだろうか。
おわりに
ちなみに複数のファイルに対して一括で処理を行うには mogrify を使うとよい。
$ mogrify -strip img_*.jpg
いやー、ImageMagick 便利ですな。