ImageMagickの、個人的に使いそうな使い方についてまとめてみる(細かいことは書かない)。
なお、バージョン7以降では、convertなどの代わりにmagickコマンドを使うようになっていることに注意すること(互換性のため、過去のコマンドもまだ使用可能)。ここではバージョン6以前のコマンドで書いていく。
- フォーマット変換
- 画像の情報表示
- 画像のメタデータ(exif)削除
- 画像の拡大・縮小
- 画像の切り取り
- 画像のサイズを拡張する
- 画像の回転、反転
- 画像に変化を加える
- 線や図形を描く
- 文字を描く
- 画像を連結する
- 画像を重ねる
- 補足:色の選択
- 参考リンク
- 続き
フォーマット変換
convert (変換前) (変換後)
、これだけでうまく行くはず(フォーマットは自動で判定してくれる)。convert example.jpg example.png
convert example.webp example.png
convert example.jpg example.avif
convert example.png example.jxl
#jxlはバージョン次第で未対応かも
画質オプション
非可逆圧縮(jpg、webp、avif、jxlなど)の形式の場合、-qualityで画質の設定ができる。0〜100で、数字が大きいほうが画質が良い。convert example.jpg -quality70 example.avif
webpは-define webp:lossless=true
オプションを使用すれば可逆圧縮も使える。
convert example.png -define webp:lossless=true example.webp
jxlは-quality 100
を指定すると可逆圧縮になる(これはソースコードを見ると分かる)。
劣化がないことを確認する
compareコマンドを使って、画像が同一であることを確認できる。可逆圧縮なら必ず同一になる。compare -metric AE example.png example.webp NULL: #0が出力されたら2つの画像はまったく同じ
画像の情報表示
identify
コマンドを使う。オプションで-verbose
を使うとメタデータなど細かい情報も表示できる。identify -verbose example.jpg
画像のメタデータ(exif)削除
-strip
オプションで、カメラで撮った画像などに埋め込まれている情報を削除できる。convert example.jpg -strip result.jpg
画像の拡大・縮小
-resize
オプションを使う。縮小も拡大もできる。convert example.jpg -resize25% result.jpg
サイズを指定することもできる。単に-resize (数字)
だと幅、-resize x(数字)
とすると高さを指定する(縦横比は保存される)。
convert example.jpg -resize300 result1.jpg convert example.jpg -resize x200 result2.jpg
縦横比を変えたい場合は、-resize (数字)x(数字)!
とする。
convert example.jpg -resize 200x200! rsult.jpg
画像の切り取り
-crop [width]x[height]+[x]+[y]
と指定する。起点を画像の左上と考えて、座標を指定する。[width]と[height]では出力する画像のサイズを指定し、[x]と[y]では出力画像の左上になる箇所を座標で指定する。[width]と[height]は数字と%のどちらでも指定可能。このとき、
+repage
をオプションで同時に使ったほうが良い(参考リンク)。convert example.png -crop 700x500+200+200+repage result.png
また、-gravity
オプションを使うと、起点となる点を変更できる。起点を右や下にすると座標の正負が反転するので注意すること(参考リンク→ImageMagick の画像 Crop #ImageMagick - Qiita)。
例として、縦横50%で真ん中を切り取ってみる。
convert example.png -gravity center -crop50%x50%+0+0+repage result.png
画像のサイズを拡張する
-extent
で画像のサイズを拡張する。余った部分はデフォルトだと白になるが、-background
で色を変更することもできる。また、デフォルトだと左上を起点として拡張されるが、これも
-gravity
で変更できる。より細かく位置を調整したいなら、
-extent [num]x[num]+[num]+[num]
のように指定する。convert example.jpg -background turquoise -gravity center -extent 500x500 result.jpg
画像の回転、反転
-rotate
で回転角度を指定する。+(省略可)は時計回り、-は反時計回りになる。convert example.jpg -rotate30 result.jpg
-background
を使うと背景の色を指定できる(これは他のコマンドでも同じ)。
また、-flip
で上下反転、flop
で左右反転ができる。
画像に変化を加える
色々あるので軽くまとめてみた。細かい説明は省略。- -monochrome モノクロにする
- -colorspace gray グレースケールにする
- -negate 色を反転させる
- -sepia-tone 80% セピア調にする。80%が丁度良いらしい
- -colors [num] 減色する
- -blur {radius}x{sigma} 画像にぼかしをかける。
- +noise Gaussian -attenuate 5.0 画像にノイズを加える。+noiseでノイズの種類、-attenuateでノイズの量を指定する。
- -noise [num] ノイズを除去する。
- -modulate [num],[num],[num] それぞれ輝度、彩度、色相を指定する(HSL色空間)。もとの画像を100と考えて、パラメータを調整できる
- -fill (色) --colorize [num]% 画像全体に薄く色を塗る。colorizeの数値を上げると色が濃くなる(100%で完全に塗りつぶす)
- -contrast コントラストを良くする。重ねがけできる
- -equalize、-normalize、-auto-level これら3つもコントラストを調整できるらしい。それぞれアルゴリズムが違うが自分にはよく分からない
- +antialias アンチエイリアスを無効にする(デフォルトでは有効になっている)
- -roll +[num]+[num] サイズを変えずに画像を移動し、見切れた部分は逆側に出す
- - -shear [num]x[num] ねじって回転させる
- -wave [num]x[num] 画像を波状にする
- -swirl [num] 画像を渦上に回転させる
- -implode [num] 内側に破裂するような加工をする。マイナスの数だと外側に破裂する
- -paint [num] 油絵風に加工する
- -charcoal [num] 木炭画風に加工する
- -polaroid [num] ポラロイド写真風にする(numには傾ける角度を指定する)
- -vignette [num]x[num] 四隅を暗くする
- -sketch [num] 鉛筆画風に加工する
- -emboss [num]x[num] 金属板風に加工する
線や図形を描く
基本的には-draw
オプションを使用し、パラメータに描く図形と座標を指定していく。そのとき、
-fill
オプションを使って塗りつぶす色を指定する(-fill none
だと塗りつぶさない)。また、-stroke
オプションで線の色を指定し、-strokewidth
オプションで線の太さを指定する。図形と指定するパラメータ
点を描く
point x,yで座標を指定する。convert example.jpg -fill blue -draw'point 100,200' result.jpg
直線を描く
line x0,y0 x1,y1のように、始点と終点の座標を並べて指定する。convert example.jpg -stroke green -strokewidth10-draw'line 500,300 1000,1200' result.jpg
長方形を描く
rectangle x0,y0 x1,y1 のように、左上と右下の座標を並べて指定する。convert example.jpg -fill none -stroke red -strokewidth5-draw'rectangle 1000,200 300,1500' result.jpg
折れ線を描く
polygon x0,y0 x1,y1 x2,y2 …のように、座標を並べて指定する。曲線(ベジェ曲線)を描く
bezier x0,y0 x1,y1 x2,y2 x3,y3 のように、制御点の座標を4つ指定する。最初の点が始点、最後の点が終点になる。他にも円、弧、楕円、などを描くことができ、またSVGのPathを使用することもできる(ここでは省略する)。
文字を描く
画像上に文字を描くこともできる。-annotate +[x]+[y] [文字列]
として、座標と文字列を指定する。(-annotate [num]x[num]+[x]+[y] [文字列]
として、文字列を回転させることもできる)。起点は-gravity
で変更できる。文字のサイズは
-pointsize [num]
で指定する。フォントは
-font [フォント]
で指定する。使用できるフォント名は、convert -list font
とコマンドを打つと一覧表示できる。また、フォントファイルを直接指定することもできる。文字の色は、図形を描くときと同様に、
-fill [色]
で指定する。また、-stroke [色]
や-strokewidth [num]
も使用できる。convert example.jpg -fill none -strokewidth5-stroke blue -font Noto-Sans-CJK-JP -pointsize200-gravity southwest -annotate +0+0'任意の文字列' result.jpg
画像を連結する
-append
だと横に、+append
だと縦に連結される。convert -append example1.jpg example2.jpg result.jpg
画像を重ねる
composite
コマンドを用いる。基本的には、composite [上の画像] [下の画像] [出力画像]
という順番で指定する。上の画像の配置を変えるには、
-geometry +[x]+[y]
とする。デフォルトだとは起点は左上になるが、-gravity
で起点を変えることもできる(上で述べた-crop
の場合と同じ)。composite -gravity southeast -geometry +50+50 over.jpg under.jpg result.jpg
-watermark [num]%
を指定することで、透かしを入れることもできる。
composite -gravity southwest -watermark30% over.jpg under.jpg result.jpg
補足:色の選択
指定できる色はconvert -list color
で確認する。'#00ff00'
や'rgb(0,255,0)'
のようにRGBで表現することもできる。参考リンク
Examples of ImageMagick UsageImageMagick 解説インデックス #ImageProcessing - Qiita
ImageMagick コマンドリファレンス | 画像変換ソフトの定番、ImageMagickのコマンドをサンプル付きで解説しています。
Imagemagickの使い方日本語マニュアル
なんとなくコマンド(49) ImageMagickで画像処理その3 | TECH+(テックプラス)