Imagemagickの簡単な使い方からリサイズ実践例など。参考になる記事のまとめ

Lightroomからimagemagickを使いたいと思い、imagemagickの簡単な使い方を調べてみました。

develop or drink ?
 develop or drink ?  photo by tea ©

imagemagickできる事が多岐に渡りますので、今回は自分がやりたかった次の処理を中心にまとめてみたいと思います。

  • リサイズ
  • ウォーターマーク(画像透かし)を重ねる
  • シャープをかける
  • Exifの削除
Ads

目次

Imagemagickとは?

imagemagick(イメージマジック)は、コマンドラインから動作する画像処理プログラムのことです。画像変換や複数の画像を重ねたり、シャープなどのフィルターも使うことができます。その機能はかなり豊富で、主にGIMPやWebサービスのサーバーで利用されているプログラムです。

imagemagick
Use ImageMagick® to create, edit, compose, or convert bitmap images.

imagemagickのインストール方法

まずはimagemagickのインストールを行います。次のようにプログラムをインストールしたり、コマンドから簡単にインストールができます。

簡単な使い方。リサイズをしよう

まずは簡単なリサイズを行ってみます。コマンドの基本的な操作方法は別の記事をご覧ください。

bash
1
2
$ cd your-folder
$ convert inputFile.jpg -resize 1000x1000 outputFile.jpg

上記は、元の画像となるinputFile.jpgを長辺1000pxでアスペクト比(縦横比)を維持しながらリサイズします。最後にoutputFile.jpgとして保存するコマンドです。

imagemagickのリサイズではconvertコマンドを使うのが一般的のようです。

ウォーターマークの追加

続いて、画像のリサイズ後にウォーターマーク画像(watermark.png)を追加します。

bash
1
$ convert -resize 1000x1000 -composite inputFile.jpg watermark.png -geometry 100x80+50+80 outputFile.jpg

-composite:画像を重ねる

複数の画像を重ねるには-compositeオプションを使います。上記の例では下層にinputFile.jpgを、上層にwatermark.pngを重ねています。

-geometry:重ねる画像の配置位置を決める

重ねる画像の大きさや、配置位置を決めるには-geometryオプションを使います。指定方法は縦の大きさx横の大きさ+基準値からのx座標+基準値からのy座標となります。

その他、よく使いそうなオプション

その他、便利なオプションをまとめてみたいと思います。

オプション 説明 使用例
-auto-orient Exifに基づく画像の回転 -auto-orient
-strip Exifの削除 -strip
-unsharp アンシャープ。指定方法は、半径xディテール+適用量+しきい値の組み合わせ。半径を0に指定するとimagemagickが画像に応じて最適なシャープ処理を行う。 -unsharp 0x0.75+0.75+0.008
-gravity compositeオプションで重ねる画像の配置位置。North(上),South(下),East(右),West(左),Center(中心)を組み合わせて指定する。 -gravity SouthEest
-quality JPEGの品質 -quality 97
-compose Photoshopで言うところのBrend-If(描画モード)のようなもの。いくつかモードが用意されている。 -compose over
-depth 出力するファイルの色深度(bit数) -depth 8

上記のオプションを追加すると次のようになります。コマンドが長いので改行を入れています。

bash
1
2
3
4
5
6
7
8
9
10
$ convert -resize 1000x1000 \
-auto-orient \
-strip \
-unsharp 0.5x1.0+0.75+0.008 \
-quality 97 \
-composite inputFile.jpg watermark.png \
-gravity SouthEast -geometry 100x80+50+80 \
-gravity over \
-depth 8 \
outputFile.jpg

コマンドが長文になってしまいましたが、上記のコマンド処理を一行ずつ見ていくと次の通りです。

  1. 長辺1000ピクセルでリサイズ
  2. 画像の回転情報を元に回転させる
  3. 画像のExifを削除
  4. シャープの処理
  5. JPEGの品質は97に指定
  6. inputFile.jpgとwatermark.pngを合成する(重ねる)
  7. watermark.pngは画像領域の右下に配置
  8. 画像のブレンドモードは通常モードに指定
  9. 色深度は8bitに指定
  10. outputFile.jpgに書き出し

上記で紹介したような、オプションを使うことで、ある程度自由にリサイズしたり、好きな位置にウォーターマークを配置することができます。

画像をカラーオーバーレイする

画像透かしなどの画像を単色で塗りつぶしたい時がありました。こういった時にはimagemagickでカラーオーバレイすることができます。

bash
1
2
3
4
$ convert "watermark.png" \
\( -clone 0 -fill red -draw "color 0,0 reset" \) \
-compose atop \
-composite "output.jpg"

透明(アルファ)を持つPNG画像の場合は、透明度もしっかり維持されます。

リサイズ画像にカラーオーバーレイした画像透かしを重ねる

続いて、前項の「-composite:画像を重ねる」の項目と組み合わせると以下のようなコマンドになります。

bash
1
2
3
4
5
6
7
8
9
10
11
12
$ convert -size 1000x800 canvas:#ffffff \
\( -auto-orient -strip -resize 1000x1000 -unsharp 0x1.00+0.75+0.008 "inputFile.jpg" \) \
-gravity Center \
-composite \
\( "watermark.png" \
\( -clone 0 -fill "#FFFFFF" -draw "color 0,0 reset" \) \
-compose atop -composite \) \
-gravity SouthEast -geometry 200x70+20+20 \
-composite \
-depth 8 \
-quality 97 \
"output.jpg"

コマンドが長文になってしまいましたが、上記のコマンド処理を一行ずつ見ていくと次の通りです。

  1. 1000x800ピクセルの画像領域を作成
  2. inputFile.jpgを1000ピクセルでリサイズ(1000x800になる予定)
  3. リサイズ画像を中央に配置
  4. リサイズ画像を画像領域に重ねる
  5. ウォーターマーク画像(watermark.png)
  6. カラーオーバーレイさせる色を設定
  7. カラーオーバーレイさせる
  8. 画像領域の右下にウォーターマークを配置
  9. ウォーターマークを画像領域に重ねる
  10. 色深度は8bitに指定
  11. JPEGの品質は97に指定
  12. output.jpgに書き出し

参考記事

上記の記事を書くにあたり、以下の記事を参考にさせていただきました。参考になる情報をありがとうございます。

箱の中の自由粒子
ImageMagickでリサイズする方法

簡単なリサイズ方法とアンシャープの掛け方について解説されている。

ゆきのぶ日記
写真を日記に載せるときのImageMagickの使い方

リサイズの使用例と、Exifの削除、Exif情報に基づいた画像回転、シャープについて解説されている。

Loud Minority
RMagick/ImageMagickで位置決めをする Gravityの挙動まとめ

iamgemagickの-gravity-compositeオプションで画像を重ねる際に、その画像の位置について解説されている。

ImageMagickのメモ
ImageMagickのメモ

-composeオプションで画像を重ねる際に、photoshopで言うところのbrend-if(ブレンドモード)のようなオプションを指定できる。また、文字列から画像を生成する方法も解説されており、レシピは詳細な使用例で今後の参考になる。

クックパッド開発者ブログ
ImageMagickのピクセルキャッシュとリソース制限

ImageMagickの脆弱性「ImageTragick」と対策ついて解説されている。

Imagemagick Q&A
Watermark Text Tile

ウォーターマーク画像で敷き詰めた画像を上部に重ねる方法について。

Annotating Images
imageMagick v6 Examples

ウォーターマーク画像で敷き詰めるには、上記記事のように-tileオプションを使うのも有効かもしれない。

PIXLS.US
Annotation with Imagemagick (Watermark -ish)

imagemagickから文字や画像を生成配置して、写真に注釈を付ける方法が解説されている。かなり具体的で分かりやすい。

Stack overflow
Color overlay with opacity using ImageMagick in Rails

カラーオーバーレイの描画モードについて解説されている。

Stack overflow
Apply gradient mask on image that already has transparency with ImageMagick ?
Imagemagickの高速化 mprとmpc

2つの透明度(アルファ)を持った画像を、それぞれの透明度を維持したまま合成する方法について解説されている。一旦、2枚の透明画像からマスクを作り合成する。この際、mpr:というコマンドはQiitaの記事が参考になる。

また、アルファを持つウォーターマーク画像を、指定した色で抜き出すのは次のコマンドとなる。

bash
1
2
3
4
5
# 水色で抜き出す
$ convert \
-alpha extract watermark.png \
\( -clone 0 -fill "#8FFFFF" -draw "color 0,0 reset" \) \
+swap -compose copyopacity -composite PNG32:result.png

昼メシ物語
本当は速いImageMagick: サムネイル画像生成を10倍速くする方法
Qiita
ImageMagick高速化まとめ

imagemagickの処理を高速化する方法が解説されている。convertコマンドを使用する際に-define jpeg:size=800x600などの、リサイズ後のサイズを定義しておくと、処理が速くなる。

また、imagemagickのインストール時に--disable-openmpオプションを指定してインストールすると、メモリ消費を抑えるiamgemagickの最新バージョンがインストールされる。

サイボウズエンジニアのブログ
もうサムネイルで泣かないための ImageMagick ノウハウ集
(引用)確かに条件がマッチすれば大変素晴らしいオプションです。ただ、変換後のサイズが大きい場合、たいていは元画像サイズの 1/3 以上程度ですが、これを超えると -define jpeg:size オプションを指定していない時以上にメモリを消費します。

-define jpeg:sizeオプションに関する、意見が参考になります。

Ads
Ads

Ads

プロフィール

gravatar
tea

ゆるふわポートレートや自然風景をのんびり撮影しています。その他の趣味は音楽制作とメダカの鑑賞。 詳細