Kết hợp nhiều hình ảnh bằng ImageMagick


166

Tôi muốn kết hợp nhiều hình ảnh thành một hình ảnh bằng ImageMagick. Để giải thích rõ hơn một chút, tôi muốn kết quả trông giống như thế này:

Đó là, tôi có một số ảnh chụp màn hình và tôi muốn biến chúng thành một hình ảnh với các hình ảnh gốc chồng lên nhau.

Bởi Googling, tôi đã bắt gặp lệnh 'composite', nhưng tôi không biết nếu và trong trường hợp đó, làm thế nào để sử dụng nó để có được kết quả mà tôi muốn.


Bạn đã kiểm tra ví dụ nhiều lớp hình ảnh ?
timbooo

Câu trả lời:


256

Đối với bất kỳ số lượng tệp đầu vào có tên :in-<something>.jpg

convert -append in-*.jpg out.jpg

Để có các tệp cụ thể được nối thêm hoặc bỏ qua các số thay vì nhận toàn bộ "toàn cầu", bạn có thể đề cập rõ ràng đến các tệp đầu vào và đặt appendlệnh sau đó

chuyển đổi trong-1.jpg trong-5.jpg in- N .jpg + nối thêm out-in1-plus-in5-in-in-in N .jpg

Bạn có thể sử dụng -append(thay vì +append) để dán dọc.

Hoặc là:

montage -mode concatenate -tile 1x in-*.jpg out.jpg

cũng sẽ tạo một tệp out.jpgchứa phần nối dọc của hình ảnh nguồn.

convert

Đối với phép nối đơn giản trong một hàng hoặc cột đơn, appendtùy chọn của convertcông cụ là đủ. Lưu ý rằng -appendghép tất cả các hình ảnh theo chiều dọc, tạo một cột với n hàng và +appendnối theo chiều ngang, tạo một hàng với n cột.

(Xem ImageMagick: Tùy chọn dòng lệnh .)

montage

Để có được sự kiểm soát tốt hơn đối với bố cục, chúng ta sẽ cần montagecông cụ. montage -mode concatenatesẽ dán các hình ảnh đầu vào với nhau như appendtùy chọn và -tile 1xđiều khiển bố cục sẽ được áp dụng.

tiletheo các cột định dạng × hàng , nhưng một trong hai bên có thể bị thiếu và montagesẽ tìm ra cách đáp ứng các ràng buộc.

Chúng tôi đang sử dụng 1x(chính xác một cột với bất kỳ số hàng nào) ở đây để có được hiệu ứng tương tự như -append. Nếu không -tile 1x, nó sẽ tham gia các hình ảnh như +append, mặc định -tile x1(bất kỳ số lượng cột nào trên một hàng).

(Xem ví dụ về ImageMagick: Montage, Mảng ảnh .)


1
Cảm ơn. chắp thêm hoạt động tốt, nhưng tôi coi việc dựng phim bị hỏng: nếu phông chữ ghostscript không được cài đặt, nó sẽ bảo lãnh, NGAY CẢ nếu bạn không chú thích các hình ảnh. Phông chữ nên được tải theo yêu cầu, không phải trước.
Bram

@Bram: Tôi không biết điều đó và hoàn toàn đồng ý. Bạn có biết nếu GraphicsMagick hành xử giống nhau không?
Peth

2
@MikeRobinson convert -append `counter=0; for x in in-*; do if [[ $(($counter % 2)) == 0 ]]; then echo $x; fi; counter=$((counter + 1)); done` out.jpgnên làm việc.
gozzilli

2
Lưu ý rằng convert -tile 2x2lệnh vv sẽ đọc các tệp theo thứ tự abc . Điều này có nghĩa là các đoạn được đặt tên 0-10sẽ được đọc như thế nào 0,10,1,2,..,9. Mất gần 2 giờ để nhận ra điều cơ bản này.
phil294

1
@Blauhirn: Đó có phải là chuyển đổi sắp xếp tên tệp, hoặc đó chỉ là tập tin trả về toàn cầu của bạn theo thứ tự đó? ví dụ ls *sẽ trả về các giá trị đó theo thứ tự đó.
101
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.