モンタージュ(ImageMagick)合成画像から追加のタイルスペースを削除しますか?

モンタージュ(ImageMagick)合成画像から追加のタイルスペースを削除しますか?

私には写真がたくさんあります。高さはすべて同じで、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

mont01

# "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

mont02

# #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

mont03

# #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

mont04

# #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

mont05

# #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

mont06

# #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

mont07

# #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

mont08

# #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

mont09

# #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

モント10

# #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

モント11

# #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

モント12

まあ、これが役に立つことを願っています。
乾杯!


編集: 私は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

モント13

-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希望の最終高さです

関連情報