ImageMagick の使用例 -- montage、画像の配列
- ジオメトリ - タイルサイズ(画像リサイズ)
- ジオメトリ - タイル間隔
- タイルレイアウトの制御
- フレーム装飾
- ボーダー装飾
- 影の装飾
- montage 画像へのラベル付け
- 保存された画像メタデータの利用
- montage の制御設定
- 画像の読み込み/生成のための設定の再利用
-
HTML サムネイル画像マップ (基本的な索引マップ)
- JPEG 画像を使った、より小さい HTML 索引マップ
- ビジュアル索引 (montage を使わない方法)
-
ポラロイド写真の montage (凝った索引マップ)
- タイルを重ね合わせた montage
- montage の連結モード
- ゼロジオメトリ (要注意)
- 背景と透明度の扱い
「magick montage」の本来の用途は、画像サムネイルの一覧表を生成すること、すなわち大量の画像コレクション、とりわけ写真を参照するためのサムネイルを作ることです。今でもその目的に使えますが、それ以外にもさまざまなことができます。このページでは、montage で何ができるか、そして自分の画像に対してどう使えるかを見ていきます。
montage、導入
「[magick montage](https://imagemagick.org/www/montage.html)」コマンドは、サムネイル画像の配列を生成するために設計されています。大量の画像コレクションの校正用シートのようなものです。オプションを何も付けない既定の「[magick montage](https://imagemagick.org/www/montage.html)」は非常に素っ気なく、かなり大きめの収納用正方形が並ぶだけで、フレームもラベルも影もありません。
magick montage balloon.gif medical.gif present.gif shading.gif montage.jpg
ジオメトリ - タイルサイズと画像リサイズ
「[-geometry](https://imagemagick.org/command-line-options/#geometry)」設定は、「magick montage」のもっとも重要な制御です。これは個々のサムネイル画像のサイズと、それらの間隔を定義します。ジオメトリのサイズ部分は、各種の専用フラグも含めてリサイズ演算子への引数として使われます。オプションの位置部分は、画像の周囲に残す枠の量として解釈されるので、これを小さくすると画像どうしの隙間が小さくなります。既定の「[-geometry](https://imagemagick.org/command-line-options/#geometry)」設定は '120x120>+4+3' で、これは与えられた画像を 120x120 ピクセルのボックスに収めることを意味します。画像がそれより大きければ縮小しますが、小さい画像はリサイズしません(「縮小のみ('>')」フラグに従います)。'タイル' サイズは、リサイズ後のすべての画像のうち最大の寸法と、実際に指定したサイズに設定されます。つまり、指定した「[-geometry](https://imagemagick.org/command-line-options/#geometry)」サイズより小さいタイルサイズになることは決してありません。前の例で見た巨大なタイルサイズは、既定の「[-geometry](https://imagemagick.org/command-line-options/#geometry)」を変更することで取り除けます。たとえば 'size' 部分を取り除くと、どの画像もリサイズされず、'タイル' サイズは与えられたすべての画像のうち最大の寸法に設定されます。たとえばここでは、montage に対して、与えた画像のうち最大のものを使い、タイル間にわずかな隙間を空けてタイル状に並べるよう指示しています。これは、入力画像がすべて小さく、ほぼ同じサイズである場合に使う、とても典型的な設定です。
magick montage balloon.gif medical.gif present.gif shading.gif \
-geometry +2+2 montage_geom.jpg
たとえばここでは、1 つの画像を大きめの 'logo' 画像に置き換えましたが、リサイズ設定を '48x48' にして、小さい画像も大きい画像もリサイズするようにしました。
magick montage balloon.gif medical.gif present.gif logo: \
-geometry 48x48+2+2 montage_geom_size.jpg
そしてここでは、再びリサイズを、指定したタイルサイズより大きい画像だけに限定しています。
magick montage balloon.gif medical.gif present.gif logo: \
-geometry 48x48\>+2+2 montage_geom_larger.jpg
見てのとおり、画像どうしの間隔は要求した 2 ピクセルの間隔より大きく見えます。しかし実際はそうではありません。タイルどうしは依然として 2 ピクセルで隔てられていますが、画像自体が要求した 48x48 のタイルサイズを満たしていないのです。'logo' 画像は依然として 48x48 ピクセルのタイルに収まるようリサイズされています。リサイズを一切したくない場合は、タイル間の間隔だけを定義してください。あるいは、'1x1<' のような特殊なサイズを使うと、IM に対して、与えたサイズより小さい画像だけをリサイズするよう指示できます。1 ピクセルより小さい画像はあり得ないので、どの画像もリサイズされません。したがってタイルサイズは、再びページ上のすべての画像のうち最大の寸法になります。これを行いたくなる理由についてはゼロジオメトリ、要注意を参照してください。
ジオメトリ - タイル間隔
「[-geometry](https://imagemagick.org/command-line-options/#geometry)」設定の位置部分は、個々の 'タイル' の間に空間を追加します。これは、タイルを連結してまとめる前に、それぞれの周囲にその寸法のボーダーを追加することで行われます。つまり既定の「[-geometry](https://imagemagick.org/command-line-options/#geometry)」設定 '+4+3' では、タイルは最終画像の左右の端から 4 ピクセル離れて配置され、タイルどうしの水平方向の間隔は 8 ピクセル(与えた値の 2 倍)になります。垂直方向の間隔についても同様です。すべての画像がリサイズされた場合(最後から 2 番目の例)、タイルどうしの間隔が端まわりの間隔の 2 倍になっていることに注目してください。
タイルレイアウトの制御
「magick montage」の次に重要なオプションは「[-tile](https://imagemagick.org/command-line-options/#tile)」設定です。これは montage に対し、タイル状に並べた画像を最終結果上でどのようにレイアウトするかの制限を伝えます。ImageMagick バージョン 6 では、「[-tile](https://imagemagick.org/command-line-options/#tile)」のヒントを与えなくても、「magick montage」は与えられた枚数の画像をどう最適にタイル状に並べるかをうまく推測します。ただし、タイル化する画像がだいたい正方形に近いものだと仮定しており、どのタイル配置にするかを決める際に画像のアスペクト比を見ていません。
magick montage font_1.gif -geometry 16x16+1+1 tile_1.gif
magick montage font_[12].gif -geometry 16x16+1+1 tile_2.gif
magick montage font_[123].gif -geometry 16x16+1+1 tile_3.gif
magick montage font_[1-4].gif -geometry 16x16+1+1 tile_4.gif
magick montage font_[1-5].gif -geometry 16x16+1+1 tile_5.gif
magick montage font_[1-6].gif -geometry 16x16+1+1 tile_6.gif
magick montage font_[1-7].gif -geometry 16x16+1+1 tile_7.gif
magick montage font_[1-8].gif -geometry 16x16+1+1 tile_8.gif
magick montage font_[1-9].gif -geometry 16x16+1+1 tile_9.gif
magick montage font_[0-9].gif -geometry 16x16+1+1 tile_0.gif
| 奇妙な「[1-5]」という構文は UNIX シェルの省略記法で、ファイル名のリストに展開されます。「magick montage」コマンド自体はこれらの文字を目にすることはなく、展開後のファイル一覧だけを受け取ります。
---|---
ImageMagick は、特定の枚数の入力画像に対してどの「[-tile](https://imagemagick.org/command-line-options/#tile)」設定を使うべきかを、かなりうまく判断します。次の表は、入力画像の枚数と、それらをレイアウトするために IM が使うタイル設定の対応です。 | 画像枚数 | タイル設定
---|---
1 | 1x1
2 | 2x1
3 | 3x1
4 | 2x2
5 - 6 | 3x2
7 - 8 | 4x2
| | 画像枚数 | タイル設定
---|---
9 | 3x3
10 - 12 | 4x3
13 - 15 | 5x3
16 - 20 | 5x4
21 - 24 | 6x4
25 | 5x5
| | 画像枚数 | タイル設定
---|---
26 - 30 | 6x5
31 - 36 | 7x5
31 - 35 | 7x5
36 | 6x6
37 - 42 | 7x6
43 - 48 | 8x6
ただし、IM は 18 枚に対して 'ぴったり収まる' 6x3 のタイル設定を自動で選んだり、28 枚に対して 7x4 の設定を選んだりはしません。とはいえ、特定の「[-tile](https://imagemagick.org/command-line-options/#tile)」設定を指定すれば、montage は常にその枚数の 'タイル' を保持できるだけの大きさの画像を作成します。
magick montage font_[1-7].gif -tile 9x1 -geometry 16x16+1+1 tile_9x1.gif
magick montage font_[1-7].gif -tile 4x3 -geometry 16x16+1+1 tile_4x3.gif
magick montage font_[1-7].gif -tile 3x3 -geometry 16x16+1+1 tile_3x3.gif
magick montage font_1.gif -tile 2x3 -geometry 16x16+1+1 tile_2x3.gif
| 見てのとおり、montage は、要求したタイル空間を埋める画像が 7 枚であろうと 1 枚だけであろうと、指定したタイル数を保持できるだけの大きさの画像を作成します。タイルは行ごとに上から順に埋めるだけで、タイル空間を列ごとに埋めるオプションは現在のところ提供されていません。 | IM v6.1 より前では、montage は画像の枚数がその空間を使い切らない場合、余分な空間を自動的に切り詰めていました。そのため、最初の「9x1」の例のような設定では、切り詰められて「7x1」のタイル画像が生成されていました。 このため、montage の昔のユーザーは、画像を 1 行に並べるために「999x1」のような大きな数をよく使っていました。今ではそのような引数は非常に長い画像を生成し、IM が処理を終えるのに長い時間がかかることがあります。したがって… IM の montage では非常に大きなタイル数を使うのは避けてください! |
|---|---|
余分な空間や複数画像の問題は、特に入力画像の枚数が不明な場合に、「[-tile](https://imagemagick.org/command-line-options/#tile)」設定から行数または列数のどちらか一方を取り除くことで回避できます。欠けた数は montage によって可変とみなされ、montage はすべての入力画像を保持できるだけのタイル空間のみを作成し、複数画像ではなく 1 枚の画像だけを生成します。 |
magick montage font_[1-7].gif -tile x1 -geometry 16x16+1+1 tile_x1.gif
magick montage font_[1-7].gif -tile x2 -geometry 16x16+1+1 tile_x2.gif
magick montage font_[1-7].gif -tile x4 -geometry 16x16+1+1 tile_x4.gif
magick montage font_[1-7].gif -tile 4x -geometry 16x16+1+1 tile_4x.gif
magick montage font_[1-7].gif -tile 5x -geometry 16x16+1+1 tile_5x.gif
magick montage font_[1-7].gif -tile 9x -geometry 16x16+1+1 tile_9x.gif
これが「[-tile](https://imagemagick.org/command-line-options/#tile)」設定のより典型的な使い方です。montage が正しくサイズ設定されることを保証しつつ、最終的な配列サイズの決定にある程度の制御を残せるからです。上の例で、9 列の画像を要求した最後の画像に注目してください。IM は 9 枚未満の画像しか与えられていなくても、要求どおり 9 列を生成しました。一方、最初の画像(1 行を要求)は、すべての画像を保持するのにちょうど良い長さになっています。「[-tile](https://imagemagick.org/command-line-options/#tile)」設定で与えた空間に montage がタイル化できる枚数より多くの入力画像がある場合は、montage によって複数の画像が生成されることがあります。その結果、ファイル名に画像のシーケンス番号が追加されるか、何らかの GIF アニメーションが作成されます。詳しくは複数画像の書き込みを参照してください。たとえばここでは、各画像のファイル名にフレーム/シーン/ページ番号の '%d' を与えることで、生成される各ページを別々の画像として保存するよう montage に指示しています。
magick montage font_*.gif -tile 4x1 -geometry +2+2 multi_%d.gif
フレーム装飾
montage で画像を並べることの最良の点は、各画像の周囲に余分な '飾り' を追加するための多くの制御が提供されていることです。たとえば、各画像の周囲に「[-frame](https://imagemagick.org/command-line-options/#frame)」を追加することで、表示する画像をより明確に区切ることができます。
magick montage balloon.gif medical.gif present.gif shading.gif \
-tile x1 -frame 5 -geometry +5+5 frame.jpg
これは「magick」の同名オプションとは異なります(3D フレームの追加の例を参照)。montage のフレームオプションは、フレームの内側と外側のベベルの既定値を自動的に算出します。そのため、必要なのは 1 つの引数の数値だけです。
ボーダー装飾
IM v6.1.0 あたりで、「-border」が montage の新しい装飾オプションになりました。これは現在、各画像が「-geometry」設定に従ってリサイズされた後、その周囲に余分な 'パディング' を追加します。
magick montage balloon.gif medical.gif present.gif shading.gif \
-tile x1 -border 5 -geometry +5+5 border.jpg
| 「-border」装飾は、現在のところフレーム装飾も適用されている場合には機能しません。
---|---
| _IM v6.1.0(おおよそ)より前は、-borderは、「magick montage」のコマンドラインで現れた時点で画像に適用されていました。これは「magick」での挙動とまったく同じです。
すなわち、ボーダーは画像が(「-geometry」に従って)リサイズされるよりはるか前に画像に追加されていました。その結果、その時点での画像サイズに応じて、各画像の周囲のボーダー幅が異なってしまいました。この一貫性のなさを取り除くために、-borderは montage 専用の設定になったのです。
---|---
影の装飾
フレームと一緒に影を追加するのもなかなか良いものです。
magick montage balloon.gif medical.gif present.gif shading.gif \
-tile x1 -frame 5 -shadow -geometry +5+5 frame_shadow.jpg
もちろん、画像の影を生成するのに実際にはフレームは必要ありません。
magick montage balloon.gif medical.gif present.gif shading.gif \
-tile x1 -shadow -geometry +5+5 -background lightblue \
shadow_noframe.jpg
'ソフトシャドウ' が実装された IM v6.3.1 以降では、影は表示される画像の透明度に応じて形が整えられるようになりました! |
magick montage font_1.gif font_7.gif font_2.gif font_0.gif \
-tile x1 -shadow -geometry +3+5 -background none \
shadow_shaped.png
![[IM Output]](../static/img/montage/shadow_shaped.png)
見てのとおり、montage が使う影は実際には半透明の色で、背景が最終的な色に影響を与えられるようになっています。つまり、テクスチャ付きの背景で montage を作成したり、透明な背景を使ってそれを重ねたりすると、影は正しく振る舞います。もちろん、PNG のように半透明の色を扱える画像形式を使う必要があります。GIF のブール透明度があるため、この目的に GIF 画像ファイル形式は使えないことに注意してください。影は画像どうしの「-geometry」間隔を考慮しないことに注意してください。そのため、画像どうしが近すぎると、前の画像の影が後の画像によって覆い隠されることがあります。たとえば…
magick montage balloon.gif medical.gif present.gif shading.gif \
-tile x1 -shadow -geometry +1+1 -background none \
shadow_spacing.png
したがって、影を使うときは「-geometry」の間隔を適度に確保することをお勧めします。影の '端の切れ' を抑えるために、「-shadow」オプションは最終画像の右端と下端に 4 ピクセルの余分な端の間隔を追加します。これは通常の「-geometry」間隔に上乗せされます。しかし上で見たとおり、これでも常に十分な空間とは限りません。montage は現在のところ、生成される影のオフセット、色、'柔らかさ' を制御する手段を一切提供していません(少なくとも今のところは)。とはいえ、古いバージョンの montage が提供していた硬い長方形の影でも、そのような制御はありませんでした。
montage 画像へのラベル付け
montage に対して、画像をその元のファイル名でラベル付けするよう指示することもできますが、おそらく画像のフレームをリサイズする必要があります。さもないとラベルが収まらず、テキストラベルが切り詰められてしまうかもしれません。この場合、ジオメトリ文字列に「60x60>」を追加しました。これは IM に対し、大きい画像はこの空間に収まるよう縮小するが、小さい画像は拡大しないよう指示します。これがおそらく montage のもっとも典型的な使い方です。
magick montage -label '%f' balloon.gif medical.gif rose: present.gif shading.gif \
-tile x1 -frame 5 -geometry '60x60+4+4>' label_fname.jpg
'%f' は特殊な書式文字で、メモリ上の画像に関するさまざまな詳細を引き出せます。画像から抽出できるその他の情報については画像プロパティのエスケープを参照してください。サムネイルにラベルを付けるときに「[-frame](https://imagemagick.org/command-line-options/#frame)」を使う必要はありません。ラベルには影が付かないので、はっきり読めるままになります。
montage -label '%f' balloon.gif medical.gif logo: present.gif shading.gif \
-tile x1 -shadow -geometry '60x60+2+2>' label_shadow.jpg
そして IM v6.2.1 以降では、「[-set](https://imagemagick.org/command-line-options/#set)」画像属性演算子を使って、読み込んだ後に画像を付け直すことができるようになりました。「[-set](https://imagemagick.org/command-line-options/#set)」演算子を使って、画像についてもっと多くの情報を追加してみましょう。さらにいくつかの montage 設定も加えます…
magick montage balloon.gif medical.gif logo: present.gif shading.gif \
-tile x1 -geometry '90x32+2+2>' -pointsize 10 \
-set label '%f\n%wx%h' -background SkyBlue label_fname3.jpg
上の例で示したとおり、「[-label](https://imagemagick.org/command-line-options/#label)」設定を使って、画像が読み込まれる際の既定のラベルを定義することもできますし、読み込んだ後に「[-set](https://imagemagick.org/command-line-options/#set)」演算子を使って画像のラベルを付け直すこともできます。 |
'%wx%h は、メモリ上にある画像の現在のピクセル幅と高さを返すことに注意してください。入力時などで画像サイズが変更されていた場合、これはディスク上(または生成時)の画像サイズと異なることがあります。メモリ上のピクセルサイズが欲しい場合は、代わりに '%[width]x%[height]' を使ってください。 |
|---|---|
個々の画像のラベルを設定することで、画像ごとに異なるラベルを付けることもできます。どちらのオプションも使えますが、「[-set](https://imagemagick.org/command-line-options/#set)」演算子を適用する画像を限定するために括弧を使う必要があります。たとえばここでは、両方の形式のラベル付けを使っています。ついでに montage にタイトルも追加してみましょう。できるからというだけの理由ですが… |
magick montage -label Balloon balloon.gif \
-label Medical medical.gif \
\( present.gif -set label Present \) \
\( shading.gif -set label Shading \) \
-tile x1 -frame 5 -geometry '60x60+2+2>' \
-title 'My Images' titled.jpg
「-label '' 」または「+label」を使うことで、次の画像のラベル付けをオフにできます。ただし後で見るように、これら 2 つの設定はまったく同じではありません。同じことが、読み込み後のラベル「[-set](https://imagemagick.org/command-line-options/#set)」操作にも当てはまります。
magick montage balloon.gif \
-label 'My Image' medical.gif \
+label present.gif \
-label ' ' shading.gif \
-tile x1 -frame 5 -geometry '60x60+2+2>' labeling.jpg
最後の画像は、画像ラベルに空白を使うことで、ラベル用の空間を作りつつ空白のままにできることを示しています。これは montage を使うときの良い経験則を示しています…
すべての画像にラベルを付けるか、どの画像にも付けないか、のどちらかにしましょう!
montage 操作そのものの中で画像にラベルを付ける必要はありません。MIFF 形式も PNG 形式も、画像形式の一部としてラベルを保存できます。montage は、すでにラベルを含む画像を読み込むと、自動的にその画像にラベルを付けます。これは自動的に行われ、指定する必要はありません。私はこのテクニックを使って、非常に複雑な画像 montage をいくつか生成してきました。たとえばアノテーション角度の例の montage 配列は、このテクニックを使って作成されました。この自動ラベル付けを望まない場合は、画像を読み込む前に「-label ''」を使って、読み込まれる(または生成される)すべてのラベルを空文字列にリセットするよう montage に明示的に指示する必要があります。あるいは、画像を読み込んだ後に「+set label」を使ってラベルのメタデータを削除することもできます。ここが「[+label](https://imagemagick.org/command-line-options/#label)」と空のラベル(「-label ''」)の使用が異なる点です。前者は、読み込まれる画像が持っているかもしれないラベルメタデータを自動的に使うという既定の挙動に戻すのに対し、後者はラベルを空文字列で置き換え、事実上ラベルを取り除きます。「-label '%l'」を使うと画像の元のラベルを保持することもでき、画像処理スクリプトで何もしない(NO-OP)ラベル付けオプションとして役立ちます。「[-set](https://imagemagick.org/command-line-options/#set)」は、「[-label](https://imagemagick.org/command-line-options/#label)」または「[-set](https://imagemagick.org/command-line-options/#set)」によって一度変更または削除された画像の元のラベルを復元できないことに注意してください。
magick -label 'medical' medical.gif label_medical.png
magick -label 'logo' logo: label_logo.png
magick -label 'rose' rose: label_rose.png
magick montage label_medical.png \
-label '' label_logo.png \
+label label_rose.png \
-tile x1 -frame 5 -geometry '60x60+2+2>' label_control.jpg
上の例では、最初の画像が、画像自体に付随するラベルでラベル付けされているのがわかります。2 番目は「-label '' 」設定によって読み込み時のラベルが削除され、3 番目もまた、「[+label](https://imagemagick.org/command-line-options/#label)」でラベル設定をオフにしたため、画像のラベルを使っています。
保存された画像メタデータの利用
後で montage で使う画像を生成するときは、特定の画像ファイル形式がどんな種類の画像メタデータを保存できるかを知っておくことが重要です。たとえば、保存された画像ファイル形式の中で実際に 'label' メタデータを保存できるのは、PNG と MIFF 画像ファイル形式だけです…
magick -label 'GIF' balloon.gif label.gif
magick -label 'JPG' medical.gif label.jpg
magick -label 'PNG' present.gif label.png
magick -label 'MIFF' shading.gif label.miff
montage label.gif label.jpg label.png label.miff \
-tile x1 -frame 5 -geometry '60x60+2+2>' label_files.jpg
rm label.*
しかし、一般的なファイル形式はすべて 'comment' メタデータを使えます。これは「[-label](https://imagemagick.org/command-line-options/#label)」に '%c' 引数を指定することで使えます。
magick -comment 'GIF' balloon.gif comment.gif
magick -comment 'JPG' medical.gif comment.jpg
magick -comment 'PNG' present.gif comment.png
magick -comment 'MIFF' shading.gif comment.miff
magick montage -label '%c' comment.gif comment.jpg comment.png comment.miff \
-tile x1 -frame 5 -geometry '60x60+2+2>' comment_files.jpg
rm comment.*
これは JPEG ファイル形式で保存された写真でしばしばより役立ちますが、JPEG の画像コメントは一般的に大きすぎる(画像を説明する段落全体であることも多い)ため、montage のラベルとしては使いづらいです。ワードラップされないからです(画像の 'comment' メタデータを使ったラベル付けの代替方法についてはポラロイド写真の montageを参照してください)。他の多くのプログラムも、保存する画像に '作成者' ラベルやコメントを自動的に追加します(うんざりですが)ので、ある程度の注意が必要です。とりわけ GIMP プログラムは、しないように指示しない限り、画像を保存するたびにそのようなコメントやラベルを追加したがります。IM は一般的に、他の理由で処理しているのでない限り、保存された JPEG ファイルにコメントを追加するのには使われないことに注意してください(JPEG の非可逆圧縮のためです)。代わりに、画像データを読み込んで書き直すことを避け、それによってコメントを追加しようとしている JPEG 画像ファイルを劣化させないために、通常は何か別の方法で追加されます。そのような方法のいくつかについては、ロスレスな JPEG 処理のオプションを参照してください。ラベル付け(および画像の 'コメント')は montage に特有のものではないことも重要です。montage は、存在する場合に画像のラベルを自動的に使うだけです。ラベルやコメントは画像とその特定のファイル形式に付随するもので、montage、いや IM にすら特有のものではありません。PNG と MIFF ファイル形式は、あまり一般的には使われない 'caption' メタデータも使えます。
magick balloon.gif -set caption 'GIF' caption.gif
magick medical.gif -set caption 'JPG' caption.jpg
magick present.gif -set caption 'PNG' caption.png
magick shading.gif -set caption 'MIFF' caption.miff
magick montage -label '%[caption]' caption.gif caption.jpg caption.png caption.miff \
-tile x1 -frame 5 -geometry '60x60+2+2>' caption_files.jpg
rm caption.*
実は、これら両方のファイル形式は、画像を保存する際に存在するかもしれない画像プロパティのメタデータを何でも保存できます!
magick balloon.gif -set my_data 'GIF' my_data.gif
magick medical.gif -set my_data 'JPG' my_data.jpg
magick present.gif -set my_data 'PNG' my_data.png
magick shading.gif -set my_data 'MIFF' my_data.miff
magick montage -label '%[my_data]' my_data.gif my_data.jpg my_data.png my_data.miff \
-tile x1 -frame 5 -geometry '60x60+2+2>' my_data_files.jpg
rm my_data.*
montage に空きを残す
「[-tile](https://imagemagick.org/command-line-options/#tile)」設定の巧みな使用と、与える画像の枚数の調整によって、montage の下部に余分な空間を残すことはできますが、montage の中央に空のタイル空間を残すには、特殊な画像を使う必要があります。「null:」生成画像は、まさにこの目的のために定義されました。それが現れる位置には、(ラベルが定義されていても)ラベルが一切付かず、フレームや影の '飾り' も追加されません。タイルは、montage の描画キャンバスそのものの背景色(またはテクスチャ)を除いて、完全に空のままになります。
magick montage -label 'Image' medical.gif null: present.gif \
-tile x1 -frame 5 -geometry +2+2 montage_null.jpg
他の IM コマンドにとって、「null:」画像は 1 ピクセルの透明画像として表されることに注意してください。これは、「[-crop](https://imagemagick.org/command-line-options/#crop)」や「[-trim](https://imagemagick.org/command-line-options/#trim)」のような、操作の結果として 'ゼロ' または空の画像を生成しうるオプションの 'エラー画像' としても使われます。この特殊な画像は保存してから後で空きを残すために使うことはできません。現在のところ「magick montage」のコマンドラインで与えた場合にのみ '特別' なものになります。 | _現時点では、HTML テーブルで可能なように、montage された画像を複数行や複数列にまたがらせる方法はありません。また、生成される画像の配列に最適となるよう、可変サイズの行や列を生成することもできません。
こうした機能が本当に必要な場合は、自分で montage 風のアプリケーションを開発する必要があります。何か開発したら、ぜひ提供してください。既存の montage アプリケーションへの統合を検討します。
このための解決策としては、画像サムネイルのラベル付けとフレーム付けを自分で行い、その後画像の連結を使うか、より自由度の高い画像のレイヤー化テクニックを使うことが挙げられます。
_
---|---
その他の montage 設定 上で示した「magick montage」の設定は、montage の基本的な制御に過ぎません。自分のニーズに合わせて検討したくなる設定は他にもたくさんあります。 montage の色設定 [**-background**](https://imagemagick.org/command-line-options/#background) |
描画されたフレームの外側の色。Web ページで使うために、しばしば 'none' または 'transparent' に設定されます。-texture 設定が与えられている場合は、代わりにそちらが使われます。 |
|---|---|
[**-bordercolor**](https://imagemagick.org/command-line-options/#bordercolor) |
フレーム内側の画像用の塗り色、または任意のボーダーパディングの色。画像内の透明な領域は、そのような装飾が追加されていない限り、この色になります。 |
[**-mattecolor**](https://imagemagick.org/command-line-options/#mattecolor) |
フレームの色として使われる色。なお、この色は明るくも暗くもされて、フレームにベベルのかかった 3D 的な見た目を与えます。つまりこの設定は実際には 5 色を定義しています。(画像のフレーム付けも参照) |
[**-fill**](https://imagemagick.org/command-line-options/#fill) |
テキストラベルとタイトルの塗り色。 |
[**-stroke**](https://imagemagick.org/command-line-options/#stroke) |
テキストラベルとタイトルのストローク色。 |
| montage の制御設定 |
[**-tile**](https://imagemagick.org/command-line-options/#tile) {_cols_}x{_rows_}単一の montage 画像を埋めるために使う、横方向と縦方向の画像数。単一の montage 画像に収まるより多くの画像が読み込まれた、または生成された場合は、複数の画像が作成されます。(上記のタイルの制御を参照)[**-title**](https://imagemagick.org/command-line-options/#title) {_string_}montage 全体の上にタイトルを設定します。個々の画像のラベル付けに使われるのと同じフォント(ただし大きめ)を使います。[**-frame**](https://imagemagick.org/command-line-options/#frame) {_width_}画像を含むボックスの周囲に、与えた width を使ってフレームを作成します(最低 2 が必要ですが、5 か 6 が良い値です)。これを使うと、画像内の透明部分もボーダーの色になります。[**-border**](https://imagemagick.org/command-line-options/#frame) {_width_}与えた width を使って、画像の周囲にボーダーを作成します。これを使うと、画像内の透明部分もボーダーの色になります。[**-shadow**](https://imagemagick.org/command-line-options/#shadow)フレームの影を生成します。引数は必要なく、期待もされません。[**-texture**](https://imagemagick.org/command-line-options/#texture) {_filename_}特定の色の代わりに、与えたテクスチャ(タイル状に並べる画像)を背景に使います。詳しくは下記の背景と透明度の節を参照してください。[**-geometry**](https://imagemagick.org/command-line-options/#geometry) {_W_}x{_H_}+{_X_}+{_Y_}すべての画像が読み込まれた後、montage がそれらをキャンバスに重ねる前に画像をリサイズします。また、画像が描画されるタイルのサイズとタイル間の間隔も定義します。サイズが指定されていない場合、画像はリサイズされません。[**-gravity**](https://imagemagick.org/command-line-options/#gravity) {_direction_}画像がフレームより小さい場合に、画像をフレーム内のどこに配置するか。既定では中央に配置されます。
以上に加えて、「label:」画像生成演算子が理解するすべてのフォント設定が使えます(ラベル画像ジェネレータを参照)。これらの設定は、表示される画像の下に追加されるラベルの生成に使われます。たとえば「[-font](https://imagemagick.org/command-line-options/#font)」、「[-pointsize](https://imagemagick.org/command-line-options/#pointsize)」(「[-title](https://imagemagick.org/command-line-options/#title)」では無視されます)、「[-density](https://imagemagick.org/command-line-options/#density)」、「[-fill](https://imagemagick.org/command-line-options/#fill)」、「[-stroke](https://imagemagick.org/command-line-options/#stroke)」、「[-strokewidth](https://imagemagick.org/command-line-options/#strokewidth)」といった設定が含まれます。最終的な '出力ファイル名' 引数より前に、上記の設定のいずれか、またはすべてが定義またはリセットされている限り、montage は要求どおりにそれらを使います。 画像の読み込み/生成のための設定の再利用 ただし、これらのオプションの多くは、画像の生成や画像処理の最中など、他の目的でも使われることに注意してください。しかし、IM v6 の 'コマンドラインを見たとおりに処理する' 方式のおかげで、これは「magick montage」コマンドにとって何の問題にもなりません。つまり、これらのオプション設定のいずれかを使って、読み込まれる画像を読み込み、生成、または変更し、その後すべての画像が読み込まれた、または生成された後にそれらの設定をリセットしても構わないのです。最終的な設定値が、montage が最終処理に使うものになります。バージョン 6 より前の IM ではそうではなく、(上記の画像ラベルの例のように)中間画像を生成せずに、画像生成の設定と montage の設定を分離することは一般的に不可能でした。これは設定再利用の実用的な例です。私はこれらの例のページで使ってきたフォントのいくつかの一覧表を作りたかったので、montage による画像の最終処理のために設定を他の値にリセットしました。
magick montage -pointsize 24 -background Lavender \
-font Candice -label Candice label:Abc-123 \
-font Corsiva -label Corsiva label:Abc-123 \
-font SheerBeauty -label SheerBeauty label:Abc-123 \
-font Ravie -label Ravie label:Abc-123 \
-font Arial -label Arial label:Abc-123 \
-font ArialI -label ArialI label:Abc-123 \
-font ArialB -label ArialB label:Abc-123 \
-font ArialBk -label ArialBk label:Abc-123 \
-font CourierNew -label CourierNew label:Abc-123 \
-font LokiCola -label LokiCola label:Abc-123 \
-font Gecko -label Gecko label:Abc-123 \
-font Wedgie -label Wedgie label:Abc-123 \
-font WebDings -label WebDings label:Abc-123 \
-font WingDings -label WingDings label:Abc-123 \
-font WingDings2 -label WingDings2 label:Abc-123 \
-font Zymbols -label Zymbols label:Abc-123 \
\
-frame 5 -geometry +2+2 -font Arial -pointsize 12 \
-background none -bordercolor SkyBlue -mattecolor DodgerBlue \
montage_fonts.gif
![[IM Output]](../static/img/montage/montage_fonts.gif)
「magick montage」コマンドの 2 つの段階に注目してください。ほぼ空の余分な行を入れて明確に区切りました。最初の部分は、本質的には通常の IM「magick」コマンドで複数画像を定義するのとまったく同じであり、同じく ' 見たとおりに処理する' 順序で処理されます。2 番目の部分は、「magick montage」コマンド自体に使わせたい設定を_すべて_定義しています。すなわち、フレーム付け、画像のリサイズ、最終的な montage 画像で使いたいフォントと色です。とりわけ、montage された画像の下のラベル付け用に「[-font](https://imagemagick.org/command-line-options/#font)」と「[-pointsize](https://imagemagick.org/command-line-options/#pointsize)」の設定をリセットするよう気を付けています。このように「magick montage」のオプションを分けることもできますが、実際には montage の設定はコマンドライン上のいつでも定義できます。それらの設定が画像の生成や処理のオプションを妨げず、コマンドラインの末尾に達した時点で正しく定義されている限り、「magick montage」はそれらを使います。余談: 上記と似たことを行う(そして以前のバージョンの montage でも動作する)、TrueType(.ttf)フォントのディレクトリを表示するために私が書いたシェルスクリプト「[**show_fonts**](../static/img/scripts/show_fonts)」を見てみたいかもしれません。別のシェルスクリプトの例として「[**show_colors**](../static/img/scripts/show_colors)」もあります。
montage と magick のオプションの違い
さて、「magick montage」は一般に、入力画像の読み込みと処理において任意の「magick」設定や演算子を使うことを許しますが、強調しておくべきいくつかの違いがあります。次の「magick」演算子と設定は、「magick montage」の中で使われると挙動が異なります。
[**-tile**](https://imagemagick.org/command-line-options/#tile)「magick」では、「[-tile](https://imagemagick.org/command-line-options/#tile)」設定は「[-fill](https://imagemagick.org/command-line-options/#fill)」色の代わりにテクスチャとして使う画像を定義します。「magick montage」では、個々の画像セル 'タイル' をどうレイアウトするかを定義します。詳しくは上記のタイルレイアウトの制御を参照してください。[**-frame**](https://imagemagick.org/command-line-options/#frame)「magick」では、これは画像の周囲に 3D フレームのボーダーを追加するために使われる演算子で、正しく動作するには 4 つの引数を必要とします(Convert Frame の例を参照)。詳しくはフレーム装飾を参照してください。[**-border**](https://imagemagick.org/command-line-options/#border)IM v6.1.0 あたりで、この演算子は montage の特殊なオプションになりました。そのため、前述のフレームオプションと同様に、Convert Border のように 2 つの引数ではなく、引数として数値を 1 つだけ取ります。詳しくはボーダー装飾を参照してください。[**-shadow**](https://imagemagick.org/command-line-options/#shadow)「magick」の「[-shadow](https://imagemagick.org/command-line-options/#shadow)」オプションは引数を取り、それを使って、元の画像の 2 つ目のコピーの下に置ける柔らかくぼやけた影を作成します。しかし「magick montage」では、これは長方形の影付け機能をオン/オフするだけのブール設定です。詳しくは影の装飾を参照してください。[**-geometry**](https://imagemagick.org/command-line-options/#geometry)「magick montage」の「[-geometry](https://imagemagick.org/command-line-options/#geometry)」オプションは、最終的な montage の各セル内の画像サイズと、セル間の間隔を提供するために単に保存されます。「magick」では、最後の画像だけをリサイズし、画像合成のオフセットを設定します。
「magick」形式のこれらのオプションをどうしても使う必要がある場合は、「magick montage」に渡す前に「magick」を使って画像を前処理する必要があります。中間ファイルを使う方法の 1 つは、上記の画像ラベルの例で示しました。もう 1 つは、「magick」で処理を行い、その結果の複数画像をそのまま「magick montage」にパイプで渡すことです。この分離は、これらの例すべてで私がやってきたように、常に画像の入力処理を最初に行い、その後に「magick montage」固有の設定を行うようにすれば、簡単に実現できます。これは上の最後のフォントの例で特に示されています。たとえば、「magick」のフレームを使って画像をフレーム付けし、その後「magick montage」のラベル付きフレームを使って再びフレーム付けしてみましょう。
magick -label %f balloon.gif medical.gif present.gif shading.gif \
-mattecolor peru -frame 10x5+3+0 miff:- |\
magick montage - -tile x1 -frame 5 -geometry '64x56+5+5>' double_frame.jpg
「magick」形式の「[-frame](https://imagemagick.org/command-line-options/#frame)」演算子に必要な追加の引数も見て取れます。
画像ディレクトリの索引
HTML サムネイル画像マップ
montage は画像のサムネイルマップを生成するために特に設計されています。たとえばここでは、写真画像のソースディレクトリの索引を作成しました。このディレクトリには、IM 使用例全体で例に使われているデジタル写真が入っています。結果を見るには、下の 'art' 画像をクリックしてください。 |
magick montage -label '%t\n%[width]x%[height]' \
-size 512x512 '../img_photos/*_orig.*[120x90]' -auto-orient \
-geometry +5+5 -tile 5x -frame 5 -shadow photo_index.html
IM Examples
Photo Store
| 単なる '%wx%h' ではなく '%[width]x%[height]' を使っていることに注目してください。画像が読み込まれる際にリサイズされているため、これは重要です。前者は画像をディスク上にあるとおりの元のピクセルサイズでラベル付けするのに対し、後者は画像の現在のリサイズ後のサイズを使います。これはユーザーが見落としがちな点です。
---|---
このコマンドの結果は 3 つのファイルでした…
[photo_index.png](../static/img/montage/photo_index.png)すべての画像サムネイルの montage [photo_index_map.shtml](../static/img/montage/photo_index_map.shtml.txt)サムネイル画像用の HTML 'イメージマップ' [photo_index.html](../static/img/montage/photo_index.html.txt)World Wide Web 用の HTML サムネイル索引ページ。 これには前述のイメージマップのコピーも含まれます。
もちろん、索引画像だけが欲しい場合は HTML 索引ファイルを生成する必要はありません。その場合は、上記のコマンドの「photo_index.html」を、生成したい画像に置き換えるだけです。画像の「[-label](https://imagemagick.org/command-line-options/#label)」に画像プロパティのエスケープ '%t' を使っていることに注目してください。これは 'パス' 部分を含まない画像のファイル名です。ただし HTML リンクには適切な 'パス' 部分が含まれるので、画像そのものとは別のディレクトリに索引画像を作成できます。上記の例のソース画像「'*_orig.*'」は引用符で囲まれているので、'*' の展開はコマンドラインシェルではなく「magick montage」コマンド自身が行います。これにより、問題になりうるコマンドラインの長さ制限を回避できます。また、読み込む際に画像の初期リサイズ '[120x190]' をいくつか行っています(画像読み込みの修飾子を参照)。JPEG 画像については、JPEG ライブラリが非常に大まかな初期スケーリングを行えるよう、より小さい「[-size](https://imagemagick.org/command-line-options/#size)」設定も指定して、画像全体をメモリに読み込まないようにしました。これをしないと、本当に必要がないのに、非常に大きな JPEG 画像が膨大な量のメモリと CPU サイクルを消費しかねません。また、画像が持っているかもしれないプロファイルを「[-strip](https://imagemagick.org/command-line-options/#strip)」しています。詳しくはプロファイル、ストリッピング、JPEG の扱いと JPEG 画像の読み込みを参照してください。montage の「[-geometry](https://imagemagick.org/command-line-options/#geometry)」オプションも最終的なリサイズ設定を指定できますが、この場合は読み込み処理の中で行ったので必要なく、その設定に 'size' を一切設定していないことを覚えておいてください。最後に、「[-tile](https://imagemagick.org/command-line-options/#tile)」オプションの '5x' は、すべての画像が単一の画像に収まるようにするために使われています。さもないと「magick montage」が複数ページの HTML ファイルを生成しかねず、それらは正しくリンクされません。これはいずれ変わるかもしれませんが、HTML 生成は ImageMagick の主要な目標ではありません。サムネイルと HTML 索引ページを生成する他の方法については、サムネイルの例のページを読んでください。
JPEG 画像を使った、より小さい HTML 索引マップ
上記の索引画像は PNG 形式の索引画像を生成しました。これは非可逆でない形式であるために使われており、索引化する画像の色が大きく異なる場合に重要なことがあります。また、背景色が 'transparent' または 'none' に設定されている場合に、montage の新しい 'ソフトシャドウ' 機能を使えるようにもします。非常に古い IM では、上記に対して GIF 画像を生成していました。しかしこれは、形式の制限の一部として、結果に対して大幅な減色を行います。また PNG が許す半透明の 'ソフトシャドウ' の使用も許しませんでした。JPEG も半透明を許しませんが、画像に透明な背景を使わなければそれは問題になりません。しかし JPEG は PNG よりずっと小さく、これは索引画像のサイズを、特に Web 用途で劇的に削減しつつ、なお幅広い色を扱う方法を提供します。ただし、上記の HTML 出力は PNG 形式の画像しか生成しないので、PNG を JPEG に変換するだけでなく、HTML ファイルを修正するための余分な処理も必要になります。 |
magick montage -label '%t\n%[width]x%[height]' \
-size 512x512 '../img_photos/*_orig.*[120x90]' -auto-orient \
-geometry +5+5 -tile 5x -frame 5 -shadow photo_jpeg.html
magick photo_jpeg.png photo_jpeg.jpg
perl -i -lpe 's/src="photo_jpeg.png"/src="photo_jpeg.jpg"/' photo_jpeg.html
rm -f photo_jpeg.png photo_jpeg_map.shtml
IM Examples
Photo Store
上記のコマンドはかなりトリッキーなので、何が起きているかを説明します…
- まず、以前と同じように montage のサムネイル HTML 索引を生成します。これにより「
photo_jpeg.html」と「photo_jpeg.png」のファイルが生成されます。 - 次に、その PNG 画像を、より小さい非可逆の JPEG 画像に変換します。
- それから、小さな '
perl' の 1 行スクリプトを使って、HTML ファイルが PNG の代わりに JPEG 画像を使うように変更します。 - 最後に、PNG 画像と、必要のない SHTML マップファイルを削除します。
そして、はいできあがり、サムネイル索引画像に非常に小さい JPEG 画像を使ったサムネイル索引ができました。これがサムネイル索引画像のファイルサイズの比較です…
すなわち、索引に使う画像は、元の PNG 画像の約 15% のサイズしかありません。ダウンロード可能なサムネイルの Web ページとしては大きな節約です! より小さい「[-quality](https://imagemagick.org/command-line-options/#quality)」設定を使えば JPEG 画像をさらに小さくできますが、既定の設定でも十分に妥当な結果が得られます。他に考えられるオプションとしては、「[-sampling-factor](https://imagemagick.org/command-line-options/#sampling-factor) 2x1」を使ってさらに小さくすることが挙げられます。
ビジュアル索引画像(montage を使わない方法)
montage を使う代わりに、特殊な「ビジュアル索引」入力形式を使う方法があります… |
magick 'vid:../img_photos/*_orig.*' vid_index.gif
Visual Index of
Photo Store
そして 'クリック可能な' HTML 索引ファイルも生成できます。 |
magick 'vid:../img_photos/*_orig.*' vid_index.html
Visual HTML of
Photo Store
「VID:」が索引配列を生成するために内部的に montage を使っているのは明らかです。しかし、montage を直接使った場合と同じ制御はできません。VID の HTML 索引は PNG 形式のサムネイル画像を作成することに注意してください。
ポラロイド写真の montage
複雑なポラロイド変換の登場によって、まったく異なるスタイルの montage や montage 索引を生成できるようになりました。 |
magick montage -size 256x256 '../img_photos/*_orig.*' -auto-orient \
-auto-orient -thumbnail 128x128 \
-set caption '%t' -bordercolor AliceBlue -background grey20 \
+polaroid \
+set label -background white -geometry +1+1 -tile 4x \
polaroid_index.html
Polaroid
Montage
画像をフレーム付けしラベル付けするのに「[+polaroid](https://imagemagick.org/command-line-options/#polaroid)」を使ったため、画像を(「[-thumbnail](https://imagemagick.org/command-line-options/#thumbnail)」を使って)自分でリサイズし、実際に「magick montage」の索引配列を作成する前に「[-background](https://imagemagick.org/command-line-options/#background)」と画像の「[-label](https://imagemagick.org/command-line-options/#label)」がリセットされていることを確認する必要があったことに注意してください。ただしポラロイド変換は、サムネイル画像に 'めくれ' を加える際にテキストをぼかしがちです。とはいえ、ポラロイド画像を大きめのサイズで生成してから結果を 50% に縮小することで、全体を改善できます。唯一の欠点は '影' の効果が小さくなることです。 |
magick montage -size 400x400 '../img_photos/*_orig.*' \
-auto-orient -thumbnail 200x200 \
-set caption '%t' -bordercolor Lavender -background grey40 \
-pointsize 9 -density 144x144 +polaroid -resize 50% \
+set label -background white -geometry +1+1 -tile 5x \
polaroid_index2.html
Sharper
Polaroid
Montage
この凝った montage は、上で示した他のテクニックとともに、実際の「[photo_store](img_photos.html)」ディレクトリに montage サムネイル索引を生成するスクリプトの作成に使われました。このスクリプトの結果については写真ストアの索引を参照してください。
列方向への montage
既定では、「magick montage」は与えられた順序(通常はソート順)で画像を行ごとに配置することしかできません。しかし、列順で表示したいこともあります。これは単一のコマンドでは実現できず、少なくとも 2 つのコマンドのパイプラインが必要です。たとえばここでは、2 つの montage を使って 5x3 のタイルのページを生成します。 |
magick montage font_*.gif -tile 1x3 -geometry 16x16+1+1 miff:- |\
magick montage - -geometry +0+0 -tile 5x1 montage_columns.gif
![[IM Output]](../static/img/montage/montage_columns.gif)
タイルを作成し、必要なジオメトリのタイルサイズ調整、フレーム付け、ラベル付け、間隔調整を行うのは最初の「magick montage」であることに注意してください。それからタイルの列ごとに 1 枚の画像を出力します。2 番目の「magick montage」は、列と列の間に余分な空間を追加することなく、それらの列を 'ページ' 画像へと単に連結するだけです。可変数の列からなる単一画像だけが欲しい場合は、2 番目の「magick montage」を「magick」に置き換えれば、'ページ' の余分な空間を追加せずに連結できます。たとえば… |
magick montage font_*.gif -tile 1x3 -geometry 16x16+1+1 miff:- |\
magick - +append montage_columns_2.gif
タイルを重ね合わせた montage
IM ユーザーフォーラムでの、Fred Weinhaus(別名 fmw42)と別のユーザー pooco との議論の中で、(「[-geometry](https://imagemagick.org/command-line-options/#geometry)」設定で指定する)タイル間の間隔を負の数に設定すると、画像が描画されるタイル領域を実際に重ね合わせられることが発見されました。たとえばここでは、1 行の画像に対して負の水平方向タイル間隔を使っています。
magick montage null: font_*.gif null: \
-tile x1 -geometry -5+2 montage_overlap.jpg
画像を回転させると、重なり合った連なりがさらに面白くなります…
magick montage null: font_*.gif null: -background none -rotate 30 \
-background white -tile x1 -geometry -8+2 montage_rot_overlap.jpg
画像が、「magick montage」が計算して生成するキャンバスからあふれないように、画像の行の先頭と末尾に特殊な間隔用画像「null:」を追加する必要があったことに注意してください。これは面白い可能性を示してくれます。たとえば、ランダムに回転させたポラロイド変換を利用して、重なり合うサムネイルの非常に面白い 1 行を生成できます。
magick montage -size 400x400 null: ../img_photos/[a-m]*_orig.* null: \
-auto-orient -thumbnail 200x200 \
-bordercolor Lavender -background black +polaroid -resize 30% \
-gravity center -background none -extent 80x80 \
-background SkyBlue -geometry -10+2 -tile x1 polaroid_overlap.jpg
上記のextentの使用は、「[+polaroid](https://imagemagick.org/command-line-options/#+polaroid)」が '実行' ごとに生み出しうる画像サイズのランダム性を取り除くために使われており、画像どうしの最終的な間隔や重なりをより制御できるようにします。これは非常に面白い結果ですが、実際には「magick montage」の意図された用途ではないので、BUG に分類されるべきものです。また、ユーザーによる何らかの修正なしには、どんな HTML イメージマッピングも正しく機能しないと予想されます。ただし、重なり合う画像に対するより複雑でユーザーが制御できる解決策は、レイヤーのマージのスクリプト形式を使って示されており、これが推奨される、より論理的な解決策です。レイヤー化された画像のプログラムによる位置決めの例を参照してください。
montage の連結モード
見てきたとおり、montage には特殊な連結モードがあり、「[-append](https://imagemagick.org/command-line-options/#append)」オプションと同じように、余分な空間を一切入れずに画像をつなぎ合わせるのに使えます。ただし、連結を水平、垂直、または配列のいずれに導くかを指示するために、「[-tile](https://imagemagick.org/command-line-options/#tile)」オプションを適切に設定することをお勧めします。たとえばここでは、「-tile x1」を使って画像を水平に連結します。
magick montage balloon.gif medical.gif present.gif shading.gif \
-mode Concatenate -tile x1 montage_cat.jpg
しかし、これを使って画像の配列を作ることも同じくらい簡単です。画像どうしがきちんと組み合わさるよう、できれば同じサイズであるのが望ましいです。
magick montage balloon.gif medical.gif present.gif shading.gif \
-mode Concatenate -tile 2x2 montage_array.jpg
異なるサイズの画像を連結する場合、画像は '上' の垂直方向の配置で連結され、続いて '左' の水平方向の行の配置で連結されます。
magick montage medical.gif rose: present.gif shading.gif \
granite: balloon.gif netscape: recycle.gif \
-mode Concatenate -tile 4x montage_cat2.jpg
しかし、フレーム付けも追加されると垂直方向の配置がおかしくなります。
magick montage medical.gif rose: present.gif shading.gif \
granite: balloon.gif netscape: recycle.gif \
-mode Concatenate -tile 4x -frame 5 montage_cat3.jpg
ゼロジオメトリ、要注意
「[-geometry](https://imagemagick.org/command-line-options/#geometry)」の間隔の値だけ(画像のリサイズは指定なし)の場合、すべての montage 画像フレームは同じサイズに設定されるので、もっとも幅広い画像ももっとも背の高い画像も、リサイズされずに収まります。これ自体が便利な挙動です…
magick montage present.gif rose: shading.gif \
-frame 5 -geometry +1+1 montage_geom_1.jpg
しかし、画像フレームの周囲と間に 1 ピクセルの隙間が残りました。ところが、「+0+0」の位置でその隙間を取り除こうとすると、非常に変わった問題にぶつかります…
magick montage present.gif rose: shading.gif \
-tile x1 -frame 5 -geometry +0+0 montage_geom_0.jpg
指定した 'ゼロジオメトリ'(すなわち「-geometry 0x0+0+0」)には、montage を '連結' モード(上記参照)にするという余分な効果があり、これは上の例で求めていたものではありません。単一の画像の場合は、ゼロの「[-append](https://imagemagick.org/command-line-options/#append)」(したがって連結モード)を使っても問題ありません。望む結果、すなわち余分なボーダーがない状態が得られます。そのため、画像にラベルを追加するためだけに「magick montage」を使っているなら、「-geometry +0+0」で問題ありません。ただし、ゼロオフセットを使っていても、画像に対して非ゼロのジオメトリ 'サイズ' を指定すれば、連結モードは呼び出されません。これが今度は、元の問題に対する巧妙な解決策を与えてくれます。やることは、ジオメトリの画像サイズを「1x1」に設定しつつ、IM に対して、このサイズまで画像を決して縮小しない(「<」文字を使って)よう指示することです。言い換えると、画像を決してリサイズせず、ただゼロオフセットを非ゼロのジオメトリ引数の中で使うのです。
magick montage present.gif rose: shading.gif \
-frame 5 -geometry '1x1+0+0<' montage_geom_1x1.jpg
これはもう 1 つの良い経験則を示してくれます…
montage を使うときは常に非ゼロのジオメトリを設定しましょう
たとえそれが、上で使ったような 'ニセ' のジオメトリだけだとしても。
背景と透明度の扱い
既定では、画像は montage キャンバスの上に重ねられます。このキャンバスは「[-background](https://imagemagick.org/command-line-options/#background)」色設定を使って作成されます。ここで見てのとおりです。 |
magick montage font_9.gif \( recycle.gif -set label recycle \) medical.gif \
-tile x1 -geometry +5+5 -background lightblue bg_lightblue.gif
![[IM Output]](../static/img/montage/bg_lightblue.gif)
単色の代わりに、「[-texture](https://imagemagick.org/command-line-options/#texture)」を使って、「[-background](https://imagemagick.org/command-line-options/#background)」色の代わりに使うタイル画像を定義することもできます。 |
magick montage font_9.gif \( recycle.gif -set label recycle \) medical.gif \
-tile x1 -geometry +5+5 -texture bg.gif bg_texture.gif
![[IM Output]](../static/img/montage/bg_texture.gif)
フレーム(タイルに余分なボーダー空間を追加する)を追加すると、背景キャンバスの上にさらに多くの描画 '飾り' が追加されるだけです。 |
magick montage font_9.gif \( recycle.gif -set label recycle \) medical.gif \
-tile x1 -frame 5 -geometry '40x40+5+5>' \
-bordercolor lightblue -texture bg.gif bg_frame.gif
![[IM Output]](../static/img/montage/bg_frame.gif)
フレーム付けされた場合、「[-bordercolor](https://imagemagick.org/command-line-options/#bordercolor)」設定がフレームの内側を埋めるのに使われ、事実上、画像の背景色になることに注意してください。また、画像の透明な領域もこの色に設定されることに注目してください。 | _IM のバージョン 6.1.4 より前は、画像の透明な領域に何が見えるかは未定義でした。あるバージョンでは、フレーム付けされた画像を透かして背景色やテクスチャが見えました。別のバージョンでは黒や白が見えることもありました。さらに別のバージョンでは、すべてのレイヤーを透かして見ることができ、元の画像が透明だった場所では最終画像が透明になりました。これが問題なら、今すぐアップグレードしてください。
_
---|---
IM バージョン 6.1.4 で新しく追加されたのは、特殊な 1 ピクセル幅のフレームを使える機能です。これは基本的に、画像セルの周囲のフレームを完全に取り除きますが、画像の周囲(および下)の内側の「[-bordercolor](https://imagemagick.org/command-line-options/#bordercolor)」パディングは保持します。たとえば、フレーム '1' と最小のフレーム幅 '2' を比べてみましょう。 |
magick montage font_1.gif \( recycle.gif -set label recycle \) medical.gif \
-tile x1 -frame 1 -geometry '40x40+5+5>' \
-bordercolor lightblue -texture bg.gif bg_frame_1.gif
magick montage font_2.gif \( recycle.gif -set label recycle \) medical.gif \
-tile x1 -frame 2 -geometry '40x40+5+5>' \
-bordercolor lightblue -texture bg.gif bg_frame_2.gif
![[IM Output]](../static/img/montage/bg_frame_2.gif)
しかし、montage の背景を透明にしたい場合はどうでしょうか? 特に、テクスチャマッピングを含む Web ページで使う予定の場合です。簡単です。「[-texture](https://imagemagick.org/command-line-options/#texture)」画像でその設定を上書きせずに、「[-background](https://imagemagick.org/command-line-options/#background)」色を 'None' または 'Transparent' にするだけです。たとえばここでは、透明な montage を生成しました。なお、画像の周囲と間に空間を追加するために「[-geometry](https://imagemagick.org/command-line-options/#geometry)」は依然として使われています。 |
magick montage font_9.gif recycle.gif medical.gif \
-tile x1 -geometry +2+2 -background none bg_none.gif
![[IM Output]](../static/img/montage/bg_none.gif)
もちろん「[-frame](https://imagemagick.org/command-line-options/#frame)」も使う場合は、「[-bordercolor](https://imagemagick.org/command-line-options/#bordercolor)」も透明にする必要があります。 |
magick montage font_9.gif recycle.gif medical.gif \
-tile x1 -frame 5 -geometry '40x40+5+5>' \
-bordercolor none -background none bg_framed_trans.gif
![[IM Output]](../static/img/montage/bg_framed_trans.gif)
montage の「-shadow」オプションは、上記すべての影響をまったく受けないことに注意してください。これは、背景色やテクスチャの上に重ねられる前に、セルの最終的な透明な形状に従って適用されます。 |
magick montage font_9.gif recycle.gif medical.gif \
-tile x1 -shadow -geometry '40x40+5+5>' \
-texture bg.gif bg_shadow.gif
magick montage font_9.gif recycle.gif medical.gif \
-tile x1 -frame 5 -shadow -geometry '40x40+5+5>' \
-bordercolor none -texture bg.gif bg_shadow_framed.gif
「magick montage」の使い方に関する提案、アイデア、その他の例は、もちろんいつでも歓迎します。これらの例のページの何についても同様です。
montage の画像出力サイズ
montage の数学は単純明快です…
基本的に montage の幅は次のようになるはずです…
(geometry_size + 2*frame_size + 2*geometry_offset) * images_per_column
すなわち、montage の各 'セル' には、セルどうしが連結される前に、
固定サイズのフレームと間隔(ボーダー)がその周囲に追加されます。
本質的に、montage のサイズはタイルサイズの倍数でもあるので、望むなら
montage を分割したり 'セル' を並べ替えたりするのが容易になります。
というのも、それらは長方形配列の単純な固定サイズのタイルだからです。
高さも同様ですが、ラベルと任意の montage タイトルに必要な追加の間隔が
加わります。これらはどちらも、テキスト、フォント、ポイントサイズ、解像度の
設定に大きく依存するため、計算がはるかに難しくなります。
この計算では montage に影を追加することによる影響もありますが、
それは下端と右端への単純で小さな固定の追加であるように見えます。
使われるタイルサイズには影響しないように見えます。
![[IM Output]](../static/img/montage/montage.jpg)
![[IM Output]](../static/img/montage/montage_geom.jpg)
![[IM Output]](../static/img/montage/montage_geom_size.jpg)
![[IM Output]](../static/img/montage/montage_geom_larger.jpg)
![[IM Output]](../static/img/montage/tile_1.gif)
![[IM Output]](../static/img/montage/tile_2.gif)
![[IM Output]](../static/img/montage/tile_3.gif)
![[IM Output]](../static/img/montage/tile_4.gif)
![[IM Output]](../static/img/montage/tile_5.gif)
![[IM Output]](../static/img/montage/tile_6.gif)
![[IM Output]](../static/img/montage/tile_7.gif)
![[IM Output]](../static/img/montage/tile_8.gif)
![[IM Output]](../static/img/montage/tile_9.gif)
![[IM Output]](../static/img/montage/tile_0.gif)
![[IM Output]](../static/img/montage/tile_9x1.gif)
![[IM Output]](../static/img/montage/tile_4x3.gif)
![[IM Output]](../static/img/montage/tile_3x3.gif)
![[IM Output]](../static/img/montage/tile_2x3.gif)
![[IM Output]](../static/img/montage/tile_x1.gif)
![[IM Output]](../static/img/montage/tile_x2.gif)
![[IM Output]](../static/img/montage/tile_x4.gif)
![[IM Output]](../static/img/montage/tile_4x.gif)
![[IM Output]](../static/img/montage/tile_5x.gif)
![[IM Output]](../static/img/montage/tile_9x.gif)
![[IM Output]](../static/img/montage/multi_0.gif)
![[IM Output]](../static/img/montage/multi_1.gif)
![[IM Output]](../static/img/montage/multi_2.gif)
![[IM Output]](../static/img/montage/frame.jpg)
![[IM Output]](../static/img/montage/border.jpg)
![[IM Output]](../static/img/montage/frame_shadow.jpg)
![[IM Output]](../static/img/montage/shadow_noframe.jpg)
![[IM Output]](../static/img/montage/shadow_spacing.png)
![[IM Output]](../static/img/montage/label_fname.jpg)
![[IM Output]](../static/img/montage/label_shadow.jpg)
![[IM Output]](../static/img/montage/label_fname3.jpg)
![[IM Output]](../static/img/montage/titled.jpg)
![[IM Output]](../static/img/montage/labeling.jpg)
![[IM Output]](../static/img/montage/label_control.jpg)
![[IM Output]](../static/img/montage/label_files.jpg)
![[IM Output]](../static/img/montage/comment_files.jpg)
![[IM Output]](../static/img/montage/caption_files.jpg)
![[IM Output]](../static/img/montage/my_data_files.jpg)
![[IM Output]](../static/img/montage/montage_null.jpg)
![[IM Output]](../static/img/montage/double_frame.jpg)
![[IM Text]](../static/img/montage/photo_index_sizes.txt.gif)
![[IM Output]](../static/img/montage/montage_columns_2.gif)
![[IM Output]](../static/img/montage/montage_overlap.jpg)
![[IM Output]](../static/img/montage/montage_rot_overlap.jpg)
![[IM Output]](../static/img/montage/polaroid_overlap.jpg)
![[IM Output]](../static/img/montage/montage_cat.jpg)
![[IM Output]](../static/img/montage/montage_array.jpg)
![[IM Output]](../static/img/montage/montage_cat2.jpg)
![[IM Output]](../static/img/montage/montage_cat3.jpg)
![[IM Output]](../static/img/montage/montage_geom_1.jpg)
![[IM Output]](../static/img/montage/montage_geom_0.jpg)
![[IM Output]](../static/img/montage/montage_geom_1x1.jpg)
![[IM Output]](../static/img/montage/bg_frame_1.gif)
![[IM Output]](../static/img/montage/bg_shadow.gif)
![[IM Output]](../static/img/montage/bg_shadow_framed.gif)