1分でわかるリサイズなどの画像操作が行えるImageMagickの使い方

ImageMagickとは

ImageMagick(イメージマジック)とは画像のリサイズや統合などをコマンドラインで行うためのソフトウェア。

ImageMagick Download

例えば画像を50%にリサイズする場合はPhotoshopを使用する場合は…

  1. Photoshop起動
  2. 画像をPhotoshopで開く
  3. イメージ => 画像解像度で幅と高さを50%に指定
  4. 画像を書き出す

以上の手順が必要なため時間がかかるが、ImageMagickなら下記のコマンドを実行するだけでリサイズ可能だ。

convert before.jpg -resize 50% after.jpg

convertは新規作成、mogrifyは上書き保存

前述ではconvertでbefore.jpg画像をリサイズしてafter.jpgを作成しているが、mogrifyを使用すればbefore.jpgをリサイズして上書き保存する。

mogrifyとはtransmogrifyの略で意味は「形を一変させる」

mogrify -resize 50% before.png

ファイルをPNGからJPGに変更

convert before.png after.jpg

画質変更(-quality)は使用しない

ImageMagickの画質変更(-quality)は画像劣化しやすく、劣化度合いも実行するまで不明のため、画質やプロファイル変更などはPhotoshopやSketchを使用したほうが良い。

EXIF情報は-stripで削除する

EXIF情報とは撮影日時やGPS情報などを含んだもので、これが含まれると個人情報漏洩になる可能性がある。

また、Webサイトに表示させる画像はEXIF情報を含める必要性が低く、削除したほうがファイルサイズも減らせるので必ず削除したほうが良い。

mogrify -strip photo.jpg

GIFアニメーションを作成

convert -delay 100 -loop 0 1.png 2.png 3.png anime.gif
または
convert -delay 100 -loop 0 *.png anime.gif

-delay 100は100/100秒ごとに切り替えを意味しているため0.5秒で切り替える場合は50にする。

-loop 0は無限ループを意味しており、3回繰り返す場合は-loop 3となる。

ImageMagickで作成したGIFアニメーション

EXIF情報は-stripで削除する

EXIF情報とは撮影日時やGPS情報などを含んだもので、これが含まれると個人情報漏洩になる可能性がある。

また、Webサイトに表示させる画像はEXIF情報を含める必要性が低く、削除したほうがファイルサイズも減らせるので必ず削除したほうが良い。

mogrify -strip photo.jpg

複数画像を1つに統合

画像の統合もコマンドで実行可能なのでCSSスプライト用の画像作成がすぐにできる。

convert b1.png b2.png b3.png 4.png -append sprite.png
または
convert *.png -append sprite.png

CSS Sprite用画像

画像の統合は縦は-appendで横は+appendだ。

convert *.png +append sprite.png

1つの画像に著作権画像を統合

画像内に(c)iwb.jpのような文字の画像を統合したいことがある。



composite -gravity [位置] [上の画像] [下の画像] [統合後]を使用すれば統合できる。

[位置]は下記の通り。

northwest(左上) north(上) northeast(右上)
west(左) center(中央) east(右)
southwest(左下) south(下) southeast(右下)
composite -gravity southeast c.png j_before.jpg j_after.jpg

複数の画像にc.pngを埋め込むにはforでループさせる。

for file in *.jpg; do f=(`echo $file | tr '.' ' '`); composite -gravity southeast c.png ${f}.jpg ${f}_after.jpg; done

2つの画像の差分の画像を作成

compareコマンドか-compose differenceを使用すれば2つの画像の差分の画像を作成することができる。

compareを使用する場合は下記のコマンドを実行する。

compare a.jpg b.jpg d.jpg

-compose differenceを使用してa.jpgとb.jpgの差分箇所を表示した画像するには下記のコマンドを実行する。

convert a.jpg b.jpg -compose difference -composite _diff.jpg

作成された画像をa.jpg b.jpgと統合すれば差分箇所がわかりやすくなる。

convert _diff.jpg a.jpg b.jpg +append diff.jpg

ImageMagickの-compose differenceで2つの画像の差分の画像を作成

1回のコマンドで統合済みの差分画像を作成する場合はこのようになる。

convert a.jpg b.jpg -compose difference -composite _diff.jpg && convert _diff.jpg a.jpg b.jpg +append diff.jpg && rm _diff.jpg

通常の写真の差分以外にもWebサイトのキャプチャ画像の差分チェックなど利用頻度が高いため.bashrcに関数を作成しておくと便利。

# mkdiff a.jpg b.jpg で diff.pngを作成
function mkdiff() {
  convert ${1} ${2} -compose difference -composite _diff.png
  convert _diff.png  ${1} ${2} +append diff.png
  rm _diff.png
}

不要な余白は-trimでトリミング

不要な余白をトリミングするには-trimを使用する。

convert c.png -trim c_after.png
before after
-trimでトリミング後の画像