画像にフィルターを適用して加工する場合、単発であればペイントソフトなどのGUIアプリケーションが使いやすいでしょう。
しかし、複数のフィルターを順番に適用するとなると、GUI操作では定型的な作業の繰り返しが必要となり、意外と手間がかかります。
さらに、処理する画像ファイルの数が多くなると、「フィルター数 × 画像枚数」分の手作業が発生し、かなりの苦行です。
処理の順序も厳密に守る必要があるため、人間の手作業には向いていません。
このような繰り返し処理には、CUI(コマンドラインインターフェース)の方が圧倒的に向いています。
そこで活躍するのが、画像加工の定番ツール「ImageMagick」です。
本記事では、このImageMagickを使って複数のフィルターをパイプライン形式で処理する方法を紹介します。
ImageMagickは強力な画像処理ツールで、コマンドラインから様々なフィルターを適用できます。最大の特徴は、複数の処理を「パイプライン形式」で連結して実行できる点です。これにより、効率よく画像を加工できます。
パイプライン形式とは?
ImageMagickのコマンドは、オプションを順番に指定していくことで、フィルターがその順番で適用されていきます。たとえば以下のようなコマンドでは、resize
→ blur
→ modulate
の順に処理されます。
magick input.jpg -resize 50% -blur 0x2 -modulate 120,100,100 output.jpg
-resize 50%
: 画像を50%に縮小-blur 0x2
: ぼかし(半径0、標準偏差2)-modulate 120,100,100
: 明るさを120%に調整
典型的なパイプライン例
1. 白黒化 → ぼかし → シャープ化
magick input.jpg -colorspace Gray -blur 0x1 -sharpen 0x2 output.jpg
2. コントラスト強調 → ポスタリゼーション
magick input.jpg -contrast -posterize 8 output.jpg
3. 縮小 → 回転 → 文字追加
magick input.jpg -resize 640x480 -rotate 90 -gravity South -pointsize 24 -annotate +0+10 "サンプル" output.jpg
順序が重要
同じフィルターでも順序によって結果は大きく変わります。たとえば、「先にシャープ化してから縮小」するのと、「縮小後にシャープ化」するのでは、シャープの効果が違って見えます。目的に応じて順序を工夫しましょう。
中間ファイルを作らずに済む
パイプライン処理を使えば、中間ファイルをいちいち保存する必要がありません。ひとつのコマンドラインで一括処理できるので、スクリプト化や自動処理との相性も抜群です。
まとめ
ImageMagickのパイプライン処理は、画像加工の工程をシンプルかつ高速に実行できる強力な仕組みです。複数のフィルターを連結することで、柔軟な画像処理フローを簡単に構築できます。用途に応じて順序やパラメータを工夫し、自分だけの画像処理パイプラインを作ってみてください。
コメント