Tôi đồng ý với câu trả lời được chấp nhận -geometry +0+0
để xóa thêm không gian gạch và tôi sẽ thêm -mode Concatenate
(trong một số điều kiện nhất định).
Ngoài ra, một khi bạn có các kích thước khác nhau montage
, sẽ có một chút khó khăn để phân biệt giữa "nền gạch" (không gian gạch) và "khung" - tôi thường bị mất dấu vết, vì vậy đây là một trường hợp thử nghiệm nhỏ với (có thể nhấp) hình ảnh:
#$ 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
Vâng, hy vọng điều này có thể được tìm thấy hữu ích,
Chúc mừng!
EDIT: Tôi kết hợp một GUI Python / Tkinter / PIL nhỏ cho ImageMagick, tkGui_ImageMagick.py - và cuối cùng tôi có thể tìm thấy dòng lệnh thích hợp cho thứ gì đó mà tôi muốn: tạo một đoạn phim gồm bốn hình ảnh, trong đó chiều cao và chiều rộng của hình xếp được khớp với bất kỳ chiều rộng lớn nhất của cột đó (hoặc chiều cao của hàng).
Trong ví dụ này, img1 (200x100) và img2 (300x200) đi vào cột đầu tiên, chiều rộng lớn hơn là 300 - nên đặt chiều rộng của gạch là img1. Ngoài ra, img1 cần phải có chiều cao tương quan với chiều cao lớn hơn của img3 (300 px), với nó tạo thành một hàng. Điều này có thể được chỉ định thông qua extent
toán tử (xem thêm ImageMagick • Xem chủ đề - Thay đổi kích thước và thay vì kéo dài ). Và dòng lệnh đó yêu cầu các lệnh gọi quy trình con để tách montage
s cho mỗi cột - và từ đó, convert
s riêng cho mỗi hình ảnh:
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
Lưu ý ở đây, nếu chúng ta đã sử dụng -extents
trực tiếp trong dòng dựng phim, như thế này:
montage \
img1.png -extent 300x200 -gravity center \
img2.png -extent 0x400 -gravity North \
-tile 1x -geometry +0+0 \
bmp:-
... chúng ta sẽ nhận thấy rằng các đặc điểm kỹ thuật đầu tiên cho chiều cao (200) sẽ bị bỏ qua, và 400 là lớn hơn sẽ được áp dụng cho cả hai gạch anyways !
Vì vậy chúng ta phải kiểm soát đệm của mỗi hình ảnh cá nhân (bằng cách gọi convert
với extents
cho mỗi ) - và sau đó tránh extents
trong montage
dòng; và như vậy, chúng ta phải apriori biết chiều rộng (lớn nhất) của mỗi cột (và chiều cao của mỗi hàng). Cũng lưu ý:
- Vì img1 nhỏ hơn chiều rộng / chiều cao ngụ ý của các lân cận, nên chúng ta phải đặt rõ ràng cả chiều rộng và chiều cao trong phạm vi của nó
- Kích thước khác chỉ có thể có kích thước phù hợp được chỉ định - và img4, lớn nhất, không nhất thiết phải được đệm (và chạy qua
convert
)
- Trong
montage
, thường -gravity
phải đến sau (được chỉ định đầy đủ: w & h) -extent
; trong convert
, -gravity
hoạt động trước -extent
(thường)