今回も前回に続いてImageMagickです。前回は画像形式の変換だけでしたので、今回は簡単な画像処理を行ってみましょう。なお、前回と同様にラズベリーパイではバージョン6を、その他の環境(実行画面はmacOS)ではバージョン7を使用します。コマンドに違いがあるのでバージョンに合わせて使用してください。
今回もこれまでのようにサンプルで利用するファイル・ディレクトリはデスクトップのsampleディレクトリとしています。デスクトップにsampleディレクトリがない場合は作成しておいてください。(コマンド入力ならmkdir ~/Desktop/sampleとして作成することができます) また、カレントディレクトリも上記の場所になります。cd ~/Desktop/sampleのようにコマンドを入力してカレントディレクトリを変更しておけばよいでしょう。今回使用するのは1.jpgと2.jpgの画像2枚のみです。
以後の説明では1枚だけの画像処理について説明しています。複数画像を一括処理する場合は前回説明したmogrifyを使ってください。
単色の画像を生成する
画像を加工する前に指定したサイズの画像を生成してみましょう。ImageMagickで指定したサイズで画像を生成するには-sizeの後に生成する画像のサイズを指定します。画像サイズは横幅x縦幅の形式で指定します。生成する際に画像の背景色を指定することもできます。背景色はxc:の後にカラー名や#112233、rgb(赤の輝度,緑の輝度,青の輝度)といった16進数で指定します。その後に保存する画像のファイル名(ファイルパス)を指定します。以下のようにすると320x240ピクセルサイズの青色の画像が生成されます。
・バージョン6
convert -size 320x240 xc:blue 1.png
・バージョン7
magick convert -size 320x240 xc:blue 1.png
以下の例では320x240ピクセルサイズの黄色の画像が生成されます。
・バージョン6
convert -size 320x240 xc:#ffff00 2.png
・バージョン7
magick convert -size 320x240 xc:#ffff00 2.png
画像の左右反転・上下反転
次に簡単なところで画像を左右反転させてみましょう。画像を左右反転させるには-flopを指定します。以下のようにすると1.jpg画像を左右反転させ、1h.jpgという名前で保存します。
・バージョン6
convert -flop 1.jpg 1h.jpg
・バージョン7
magick convert -flop 1.jpg 1h.jpg
左右反転でなく上下反転の場合は-flipを指定します。以下のようにすると2.jpg画像を上下反転させ、2v.jpgという名前で保存します。
・バージョン6
convert -flip 2.jpg 2v.jpg
・バージョン7
magick convert -flip 2.jpg 2v.jpg
左右反転と上下反転を同時に行う場合は、両方のオプションを指定します。
・バージョン6
convert -flip -flop 1.jpg 1hv.jpg
・バージョン7
magick convert -flip -flop 1.jpg 1hv.jpg
画像の色合いを調整する
次に画像の色合いを調整してみましょう。画像の色合いを変更するには-modulateを指定します。このオプションには,で区切られた3つのパラメーターが必要です。最初に輝度(明るさ)、次に彩度、最後が色相です。いずれも基準値が100になっています。例えば画像を暗くしたい場合は以下のように100よりも少ない値を指定します。
・バージョン6
convert 1.jpg -modulate 50,100,100 1a.jpg
・バージョン7
magick convert 1.jpg -modulate 50,100,100 1a.jpg
彩度の場合は以下のように2番目の数値を変えます。この場合、カラー画像がグレースケール画像になります。(ちなみにImageMagickにはグレースケールに変換する専用のオプションがあります)
・バージョン6
convert 1.jpg -modulate 100,0,100 1b.jpg
・バージョン7
magick convert 1.jpg -modulate 100,0,100 1b.jpg
色相だけを変えていくつかの画像を生成する場合はシェルスクリプトを作ってやれば簡単です。以下のシェルスクリプトでは5枚の色相を変えた画像が生成されます。i+=50の値を変えれば生成される画像の枚数と色相が変わります。
・バージョン6
#!/bin/bash
for ((i=0; i <= 200; i+=50)); do
echo $i
convert 1.jpg -modulate 100,100,$i "1_$i".jpg
done
・バージョン7
#!/bin/bash
for ((i=0; i <= 200; i+=50)); do
echo $i
magick convert 1.jpg -modulate 100,100,$i "1_$i".jpg
done