コマンドラインから画像結合したい
そんな時にも便利なのが ImageMagick です。
具体的にはmontageコマンドを用います。
個人的メモも兼ねて使い方をまとめました。
ImageMagickのインストール
マルチプラットフォームなコマンドツールです。
▼ 各OSでのダウンロード・インスト手順
僕はWindows環境でwsl経由で使ってみました。
WSLにおける使用OSはUbuntuです。
▼ このようにImageMagickインストール
1 |
$ sudo apt -y install imagemagick |
▼ インストール経過
1 2 3 4 5 6 7 8 9 10 |
Need to get 33.0 MB/35.1 MB of archives. After this operation, 132 MB of additional disk space will be used. Do you want to continue? [Y/n] y ... Get:60 http://archive.ubuntu.com/ubuntu jammy/universe amd64 netpbm amd64 2:10.0-15.4 [1007 kB] Fetched 27.1 MB in 7s (3934 kB/s) E: Failed to fetch http://security.ubuntu.com/ubuntu/pool/main/g/ghostscript/libgs9-common_9.55.0%7edfsg1-0ubuntu5.10_all.deb 404 Not Found [IP: 91.189.91.82 80] E: Unable to fetch some archives, maybe run apt-get update or try with --fix-missing? |
wsl環境では上記のように一部fetchエラーが発生。
ですがmontageコマンドは使えるので無視でOKです。
montageコマンドで画像結合する基本
基本のmontageコマンドの使い方がこれ
1 |
$ montage [options ...] file_1 [ [options...] file_2 ...] output_file |
結合したい画像ファイル(または画像フォーマット構文)を並べ、最後にそれら結合したアウトプット画像を指定するだけです。
たとえば次の3つの画像があるとします。
▼ 画像ファイル名と画像
画像ファイル名 | 画像 |
number_1.png | ![]() |
number_2.png | ![]() |
number_3.png | ![]() |
これを横に画像連結したい場合…
▼ このようにmontageコマンド実行
1 |
$ montage number_1.png number_2.png number_3.png out.png |
▼ 結合されたout.pngが生成される
基本の使い方はこのようになります。
ちなみに連番の画像ファイルの場合…
次のように %d でフォーマットできます。
▼ よりスマートなコマンド例
1 |
$ montage number_%d.png[1-3] out.png |
C言語のフォーマット指定子のような感じです。
上記コマンドでは %d がファイル名のプレースホルダーになり、そのあとの表現 [1-3] は1から3までの配列 [1, 2, 3] を表します。そして次々にファイル名を展開してくれます。
画像結合時の余白をなくす
生成された画像をもう一度見てみると、
結合前画像にない余計な空白ができてます。
この空白はコマンドオプションから削除可能です。
▼ 先ほどのコマンドを改変
1 |
$ montage number_%d.png[1-3] -geometry +0+0 -background none out.png |
次の2つのオプションを追加しました。
オプション | 説明 |
geometry | サイズ・余白を設定できる。ここでは +0+0 として横縦の余白をなくしている |
background | 背景色を指定できる。ここに none = 無背景をセットしている |
これで余白なしでアウトプットされます。
▼ 生成された結合後画像
もちろんgeometryオプションで任意の余白もつくれます。例えば左右に8px 上下に4pxの余白をとりたいなら - geometry +8+4 とすればOK
画像をタイル状に縦連結も可能
より応用的な使い方は画像の縦連結です。
画像をタイル状に連結することもできます。
▼ たとえば6つの画像を2行×3列に連結
1 |
$ montage number_%d.png[1-6] -tile 3x2 -geometry +0+0 -background none out.png |
▼ タイル上に画像連結される
文字通りタイルオプションを指定するだけ
文字通りタイルオプションを指定するだけ
説明するまでもないですがtileオプションに [横の画像数x縦の画像数] を指定するだけです。あとはmontageコマンドがよしなにタイル上に配置してくれます。
とっても便利ですね。