Quantcast
Channel: bogamp’s blog
Viewing all articles
Browse latest Browse all 39

ImageMagick 使い方のメモ

$
0
0

ImageMagickの、個人的に使いそうな使い方についてまとめてみる(細かいことは書かない)。
なお、バージョン7以降では、convertなどの代わりにmagickコマンドを使うようになっていることに注意すること(互換性のため、過去のコマンドもまだ使用可能)。ここではバージョン6以前のコマンドで書いていく。

フォーマット変換

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 Usage

ImageMagick 解説インデックス #ImageProcessing - Qiita
ImageMagick コマンドリファレンス | 画像変換ソフトの定番、ImageMagickのコマンドをサンプル付きで解説しています。
Imagemagickの使い方日本語マニュアル
なんとなくコマンド(49) ImageMagickで画像処理その3 | TECH+(テックプラス)

続き

bogamp.hatenablog.com

Viewing all articles
Browse latest Browse all 39

Trending Articles