Tôi có năm hình ảnh kích thước: 600x30, 600x30, 600x30, 600x30, 810x30. Tên của chúng lần lượt là: 0.png, 1.png, 2.png, 3.png, 4.png.
Làm cách nào để hợp nhất chúng theo chiều ngang để tạo hình ảnh có kích thước 3210x30 với ImageMagick?
Tôi có năm hình ảnh kích thước: 600x30, 600x30, 600x30, 600x30, 810x30. Tên của chúng lần lượt là: 0.png, 1.png, 2.png, 3.png, 4.png.
Làm cách nào để hợp nhất chúng theo chiều ngang để tạo hình ảnh có kích thước 3210x30 với ImageMagick?
Câu trả lời:
ImageMagick đi kèm với montage
tiện ích này. Montage sẽ nối từng hình ảnh cạnh nhau cho phép bạn điều chỉnh khoảng cách giữa mỗi hình ảnh ( -geometry
) và bố cục chung ( -tile
).
montage [0-5].png -tile 5x1 -geometry +0+0 out.png
Các ví dụ khác có thể được tìm thấy trên trang Sử dụng Montage
[0-5].png
sẽ tạo ra "0.png, 1.png, 2.png, 3.png, 4.png, 5.png", sáu tệp khác nhau, nhưng bạn tile 5x1
sẽ chỉ lấy năm tệp, để lại cho bạn hai tệp đầu ra. Điều này nên sử dụng [0-4].png
hoặc -tile 6x1
.
ImageMagick có công cụ dòng lệnh có tên ' chuyển đổi ' để hợp nhất hình ảnh theo chiều ngang hoặc cho mục đích khác. Tôi đã thử lệnh này và hoạt động hoàn hảo trên trường hợp của bạn:
Để nối các hình ảnh theo chiều ngang:
convert +append *.png out.png
Để xếp chồng hình ảnh theo chiều dọc:
convert -append *.png out.png
convert -append %F joined-image.png
. Tất cả các hình ảnh được chọn sẽ được tham gia như một png trong thứ tự chữ cái
convert *.png +append out.png
Bất kỳ ai sử dụng MiniMagick
đá quý rails đều có thể sử dụng công cụ tích hợp để hợp nhất hình ảnh:
# Replace this with the path to the images you want to combine
images = [
"image1.jpg",
"image2.jpg"
]
processed_image = MiniMagick::Tool::Montage.new do |image|
image.geometry "x700+0+0"
image.tile "#{images.size}x1"
images.each {|i| image << i}
image << "output.jpg"
end
Kiểm tra tài liệu để biết #geometry
các tùy chọn để xử lý việc thay đổi kích thước và vị trí. Ví dụ hiện tại sẽ thay đổi kích thước hình ảnh thành 700px
chiều cao trong khi vẫn giữ nguyên tỷ lệ khung hình của hình ảnh. +0+0
sẽ đặt hình ảnh không có khoảng cách giữa chúng.