私には写真がたくさんあります。高さはすべて同じで、Bashを介してImageMagickのモンタージュプログラムを使用して合成画像に結合しようとしています。問題は、基本的にタイルサイズ(1つの画像が1つのタイルを占める)が最大サイズの画像と同じであることです。その結果、狭い画像は多くのスペースで囲まれています。このスペースを削除したいです。どうすればいいですか?
答え1
次のようにしてみてください。
montage file1.jpg file2.jpg -geometry +0+0 -background none output.jpg
これにより、画像間の境界ができるだけ小さくなり、存在するすべてが透明になります。
埋め込み画像を使用して違いを確認するには、以下を試して比較します。
$ montage rose: -resize 100x60 rose: -geometry +0+0 -background none montage.jpg
$ display montage.jpg &
$ montage rose: -resize 100x60 rose: montage.jpg
$ display montage.jpg &
バラよりモンタージュの使い方。
得られた結果の例を公開し、目的の結果の例を手動で編集すると、これに近づくことがあります。
上記の元の投稿よりも私が好む例は次のとおりです。
montage \( rose: -resize 100x46\! \) rose: -background gray montage.jpg
montage \( rose: -resize 100x46\! \) rose: -geometry +0+0 -background none montage.jpg
答え2
追加のタイルスペースを削除する許可された回答に同意し、-geometry +0+0
それを追加します-mode Concatenate
(特定の条件下で)。
また、サイズが異なると、montage
「タイルの背景」(タイルの空間)と「フレーム」と「ボーダー」が何であるかを区別することは困難です。私はしばしば迷子になるので、ここに小さなテストケースがあります(利用可能なクリック)画像:
#$ montage --version # done on:
#Version: ImageMagick 6.6.2-6 2012-08-17 Q16 http://www.imagemagick.org
# pipe to `display` (for preview):
# montage img1.png img3.png img2.png img4.png bmp:- | display
# generate images first
convert -size 200x100 xc:red img1.png
convert -size 300x200 xc:blue img2.png
convert -size 400x300 xc:green img3.png
convert -size 500x400 xc:orange img4.png
# #01: direct montage (-tile 2x2 automatic for four images)
# note: mont01.png is 256x252 pixels!
montage img1.png img3.png img2.png img4.png \
mont01.png
# "The 'tile' size is then set to the largest dimentions
# of all the resized images, and the size actually specified."
# "by removing the 'size' component, non of the images will
# be resized, and the 'tile' size will be set to the largest
# dimensions of all the images given"
# #02: specify -geometry offset (tile spacing)
# note: mont02.png is 1008x808 pixels now!
montage img1.png img3.png img2.png img4.png \
-geometry +2+2 \
mont02.png
# #03: add border to command #02:
# border sticks around images themselves
montage img1.png img3.png img2.png img4.png \
-geometry +2+2 -border 5 \
mont03.png
# #04: add frame to command #02:
# frame is around the tile (and is "3D") - and
# background (which isn't image) is colored default gray:
montage img1.png img3.png img2.png img4.png \
-geometry +2+2 -frame 5 \
mont04.png
# #05: add background color spec to command #04:
# that is background behind the tiles - not of the tiles
montage img1.png img3.png img2.png img4.png \
-geometry +2+2 -frame 5 -background "brown" \
mont05.png
# #06: add mattecolor to command #05:
# "-mattecolor The color used as the frame color."
# but just changes color of the "3D" frame borders
montage img1.png img3.png img2.png img4.png \
-geometry +2+2 -frame 5 -mattecolor "white" -background "brown" \
mont06.png
# #07: add bordercolor to command #05:
# "-bordercolor The fill color inside the frame for images, or any border padding."
# this does change the color of time background
montage img1.png img3.png img2.png img4.png \
-geometry +2+2 -frame 5 -bordercolor "purple" -background "brown" \
mont07.png
# #08: both frame and border :
# no difference from command #07 -
# once the tiles are resized, the entire remaining
# background is used as a "border", and specifying
# "-border 5" size for it has no effect
montage img1.png img3.png img2.png img4.png \
-geometry +2+2 -frame 5 -border 5 -bordercolor "purple" \
mont08.png
# #09: add mode Concatenate (with -tile) to #08
# No difference from #08
montage img1.png img3.png img2.png img4.png \
-mode Concatenate -tile 2x2 -geometry +2+2 -frame 5 -border 5 -bordercolor "purple" \
mont09.png
# #10 remove -frame, from #09
# now there is no tile background, and
# images are not centered in tiles (they
# have gravity NorthWest instead)
montage img1.png img3.png img2.png img4.png \
-mode Concatenate -tile 2x2 -geometry +2+2 -border 5 -bordercolor "purple" \
mont10.png
# #11 Mode Concatenate with only -tile
# images are without padding (as much as possible)
montage img1.png img3.png img2.png img4.png \
-mode Concatenate -tile 2x2 -border 5 -bordercolor "purple" \
mont11.png
# #12 Try geometry +0+0 instead of concatenate
# almost the same as #11, except more correct overall borders
montage img1.png img3.png img2.png img4.png \
-tile 2x2 -geometry +0+0 -border 5 -bordercolor "purple" \
mont12.png
まあ、これが役に立つことを願っています。
乾杯!
編集: 私はImageMagickのための小さいPython/Tkinter/PIL GUIを作りました。tkGui_ImageMagick.py- 最後に、私が望むものに合ったコマンドラインを見つけることができました。タイルの高さと幅がその列(または行の高さ)の最大幅と一致する4つの画像のモンタージュを作成できました。
この例では、img1(200x100)とimg2(300x200)は最初の列にあり、より大きな幅は300です。これはimg1のタイル幅を設定する必要があります。さらに、img1の高さはimg3のより大きな高さ(300ピクセル)と関連している必要があり、それと一致する必要があります。これは、次のように指定することで実現できます。extent
演算子(また参照ImageMagick • テーマビュー - 拡大する代わりにサイズを変更して塗りつぶす)。コマンドラインには、montage
各列のsを分離し、そこからconvert
各画像のsを分離するためのサブプロセス呼び出しが必要です。
montage \
<(montage \
<(convert \
img1.png -gravity center -extent 300x300 \
bmp:-) \
<(convert \
img2.png -gravity North -extent x400 \
bmp:-) \
-tile 1x -geometry +0+0 \
bmp:-) \
<(montage \
<(convert \
img3.png -gravity center -extent 500x \
bmp:-) \
img4.png \
-tile 1x -geometry +0+0 \
bmp:-) \
-geometry +0+0 -border 2 \
mont13.png
# or as one liner:
montage <(montage <(convert img1.png -gravity center -extent 300x300 bmp:-) <(convert img2.png -gravity North -extent x400 bmp:-) -tile 1x -geometry +0+0 bmp:-) <(montage <(convert img3.png -gravity center -extent 500x bmp:-) img4.png -tile 1x -geometry +0+0 bmp:-) -geometry +0+0 -border 2 mont13.png
-extents
以下のようにモンタージュラインで直接使用する場合に注意してください。
montage \
img1.png -extent 300x200 -gravity center \
img2.png -extent 0x400 -gravity North \
-tile 1x -geometry +0+0 \
bmp:-
...最初の高さ仕様(200)は無視され、より大きな400が両方のタイルに適用されます。それでも!
convert
したがって、私たちは個々の画像のパディングを制御する必要がありますextents
(各) - これはキューextents
から除外されます。したがって、各列の(最大)幅(および各行の高さ)を事前に知っておく必要があります。montage
また注:
- img1は近隣の暗黙の幅/高さより小さいため、境界内で幅と高さを明示的に設定する必要があります。
convert
他のディメンションは関連ディメンションのみを指定でき、最大のディメンションであるimg4はまったく埋められる(および巡回)必要はありません。- はい
montage
、普通に来なけれ-gravity
ばなりません。後ろに(詳細:w&h)-extent
、操作convert
-gravity
今後-extent
(通常)
答え3
いいえmontage
、しかしより正確であると感じるのは次のとおりです。
convert 1.jpg 2.jpg 3.jpg -geometry x500 +append -gravity South a.png
x500
希望の最終高さです