2010-11-05 12 views
10

Tôi biết lệnh annotate của ImageMagick có thể chồng lên một số văn bản trên hình ảnh, nhưng nó có thể sử dụng tên tệp của hình ảnh làm văn bản này không? Tôi đã giả định như vậy, nhưng dường như không thể tìm thấy tài liệu trực tiếp xác nhận điều này.Đặt tên tập tin của hình ảnh bằng ImageMagick (hoặc tương tự)

Không có nghi ngờ một số kết hợp các tham số có thể quản lý việc này hoặc có cách nào tốt hơn để thực hiện việc này trong tập lệnh không?

Trả lời

11

Eric L. của câu trả lời là đúng - 1 từ tôi cho nó! - nhưng -annotate không cung cấp cho bạn nhiều quyền kiểm soát đối với giao diện của văn bản.

Nếu bạn tìm kiếm sự đẹp đẽ, hãy thay vì dùng thứ gì đó sử dụng -composite. Bạn có thể sử dụng lệnh IM để xây dựng hình ảnh lớp phủ trước (sử dụng nền bán trong suốt) và sau đó phủ lên hình ảnh gốc.

Dưới đây là ví dụ về cách thực hiện với -composite thay vì -annotate, sử dụng phương pháp theo kịch bản xử lý mọi tệp PNG trong thư mục hiện tại. Cái này thậm chí còn tự động điều chỉnh kích thước phông chữ và phù hợp với nó vào "width * 90%" có sẵn - đó là một kịch bản Bash (xem ý kiến ​​cho Win tương đương):

for img in *.png; do 

    width=$(identify -format %W ${img}) 
    width=$((${width} * 9/10)) 

    convert     \ 
    -background '#0008' \ 
    -gravity center  \ 
    -fill white   \ 
    -size ${width}x100  \ 
     caption:"${img}"  \ 
     "${img}"    \ 
    +swap     \ 
    -gravity south   \ 
    -composite    \ 
     "with-caption-${img}" 

done 

Một ví dụ minh họa cho một bản gốc và các sản lượng tương ứng dưới đây:

original image   image with caption!

Đây là một lệnh sử dụng -annotate, cố gắng thiết lập một vài điều vượt quá các thông số mặc định:

for img in so#12231624-right.png; do 

    convert     \ 
     "${img}"    \ 
    -fill red    \ 
    -undercolor '#0008'  \ 
    -pointsize 24   \ 
    -gravity south   \ 
    -annotate +0+5 "${img}" \ 
     "with-annotate-${img}" 

done 

original image   resulting image

+0

Đó có phải là lệnh bash không? – Serguzest

+0

Điều này là dành cho Bash, vâng. Trên Windows/DOS, cú pháp sẽ giống như 'for% i in (* .png) sẽ chuyển đổi ....'. Không có '* done *' cuối cùng ở đây, và không có dấu chấm phẩy sau phần 'for'. –

+0

Cảm ơn bạn, tôi thực sự đã giải quyết nó bash commandline tồn tại trong cửa sổ của tôi vì Git. – Serguzest

16

Đó là một mục rất cũ nhưng tôi tìm thấy nó mỗi khi tôi tìm kiếm chủ đề này, và nó không hoạt động (đối với tôi ít nhất). Ở đây cái gì mà làm việc cho tôi:

convert input.jpg -gravity South -annotate 0 '%f' output.jpg 

Hy vọng điều này sẽ giúp người ...

+0

Nhanh chóng và dễ hiểu, nhưng trên nhiều hình ảnh không thể đọc được. – erik

+0

Bạn sẽ chỉ định các ký tự cụ thể của tên tệp ở đây như thế nào? Giả sử tôi muốn 3 ký tự đầu tiên của tên tệp được thêm vào. Làm thế nào tôi sẽ làm os '% f' {0: 2}? –

0

Bạn cũng có thể sử dụng mogrify để thêm văn bản vào loạt các hình ảnh ở Một lần.

mogrify -gravity South -annotate 0 '%f' -pointsize 24 -fill white *.png 

Điều này sẽ ghi đè hình ảnh hiện có, vì vậy hãy đảm bảo bạn có bản sao lưu trước khi bạn thực hiện việc này.