2012-09-05 23 views
7

Tôi đang tìm cách hiệu quả nhất để ghép nhiều hình ảnh lại với nhau trong ImageMagick, trên cùng của hình nền, sao cho khoảng cách/khoảng cách giữa các hình ảnh được phủ lên là thích hợp?Kết hợp nhiều hình ảnh trong ImageMagick với các khoảng tương đối (không tuyệt đối)

Tôi đã điều tra việc sử dụng + nối thêm, chuyển đổi -composite và chuyển đổi bằng hợp nhất -page và -layers.

Lệnh sau (convert -composite) hoạt động, nhưng yêu cầu phải tính toán trước các kích thước hình ảnh để xác định độ lệch tuyệt đối. Thực sự, tôi muốn có khoảng cách 10 pixel giữa phần cuối của hình ảnh lớp đầu tiên và bắt đầu của hình ảnh lớp thứ hai, nhưng cách duy nhất tôi có thể thấy để đạt được điều đó là xác định độ lệch tuyệt đối từ góc trên cùng bên trái của canvas .

convert \ 
    background.jpg \ 
    first.jpg -gravity Northwest -geometry +10+10 -composite \ 
    second.jpg     -geometry +300+10 -composite \ 
    third.jpg     -geometry +590+10 -composite \ 
    output.jpg 

Tôi đang tìm kiếm một số loại điều hành sao cho ngang bù đắp có thể được giải thích tương ứng với hình ảnh "cuối cùng" trong lớp, vì vậy thay vì quy định cụ thể +300+10 cho hình ảnh thứ hai và +590+10 cho thứ ba, tôi bằng cách nào đó có thể chỉ định một bù đắp +10+10.

Tôi nghĩ trọng lực sẽ cho phép tôi đạt được điều đó (-gravity Northwest), giống như cách mà float: left; hoạt động trong định vị CSS, nhưng điều đó không đúng.

Tôi cũng đã có một số thành công như sau:

convert \ 
    -page +10+10 first.jpg \ 
    -page +300+10 second.jpg \ 
    -page +590+10 third.jpg \ 
    -background transparent \ 
    -layers merge \ 
    layered.png 

convert background.jpg layered.png -gravity Center -composite output.jpg 

Cả hai kỹ thuật được mô tả yêu cầu trước khi tính hiệu số tuyệt đối, mà là một chút đau đớn. Có cách nào tốt hơn để làm điều này?

+0

Tất cả các hình ảnh đầu vào của bạn cho cùng một quá trình ghép có cùng chiều rộng và chiều cao (và chỉ có thể thay đổi cho lần ghép tiếp theo)? –

+0

Nền là một hình ảnh thực sự, nhưng kích thước của nó sẽ là tĩnh (hoặc ít nhất nó sẽ là một số loại hình ảnh dễ dàng tileable/croppable). –

+0

Các hình ảnh không phải tất cả đều có cùng kích thước. Chúng tôi sẽ hạn chế chúng ở độ cao tối đa và chiều rộng tối đa (được xác định), do đó tùy thuộc vào kích thước của hình ảnh đầu vào, sự ràng buộc này sẽ dẫn đến độ rộng biến đổi. –

Trả lời

7

Bạn đã bỏ qua lệnh montage.

Lệnh đơn giản nhất để thêm khoảng cách mong muốn với nó là đặt tùy chọn -frame 5 với -mattecolor none. Này làm việc với hình ảnh của các giá trị chiều rộng khác nhau và không gian tất cả chúng ngoài với một khoảng cách là 10 pixels:

montage    \ 
    -alpha on   \ 
    -background none \ 
    -mode concatenate \ 
    -tile x1   \ 
    -frame 5   \ 
    -mattecolor none \ 
    *.jpg   \ 
    output1.png 

Bạn sẽ dễ dàng nhận thấy tuy nhiên, biên giới hình ảnh kết quả là rộng chỉ 5 điểm ảnh trên top, right, bottom và trái. Để loại bỏ những 5 pixel khắp nơi sử dụng:

convert output1.png -shave 5 output2.png 

để che phủ kết quả này trên background.jpg, sử dụng của bạn:

convert    \ 
    background.jpg \ 
    output2.png  \ 
-gravity Northwest \ 
-geometry +10+10 \ 
-composite   \ 
    final.jpg 
2

Bạn cũng có thể sử dụng thủ thuật khung trong suốt Kurt với append. Sử dụng phụ thêm thay vì dựng phim có lợi thế là bạn có thể sử dụng các cài đặt trọng lực để căn chỉnh hình ảnh của bạn trên cùng (phía bắc) phía dưới (phía nam) hoặc giữa.

Dưới đây là một ví dụ về làm thế nào để thêm hình ảnh theo chiều ngang với một khoảng cách 10 điểm ảnh giữa chúng, và với những hình ảnh từ giaxaydung.vn liên kết:

convert \ 
    -frame 5 \ 
    -mattecolor none \ 
    -background none \ 
    -gravity north \ 
    first.jpg second.jpg third.jpg \ 
    +append \ 
    png:- | convert - -shave 5 
    output.png 

Để thêm hình ảnh theo chiều dọc sử dụng -Nối thay vì + append. Tôi đã sử dụng một đường ống | để cạo khung bên ngoài trong cùng một lệnh.

Các vấn đề liên quan