2010-11-05 78 views
10

我知道ImageMagick的annotate命令可以將某些文本疊加到圖像上,但它是否可以使用圖像的文件名作爲此文本?我會這樣認爲,但似乎無法找到證實這一點的直接文件。使用ImageMagick(或類似的)覆蓋圖像的文件名

毫無疑問,某些參數組合可以管理這個問題,還是有更好的方法在腳本中做到這一點?

回答

11

埃裏克L.的答案是正確的 - +1從我吧! - 但-annotate不會讓您對文本的外觀有太大的控制。

如果你尋找漂亮,那麼寧可去使用-composite。您可以使用IM命令先構建覆蓋圖像(使用半透明背景),然後覆蓋原始圖像。

下面是如何使用-composite而不是-annotate使用腳本處理方法來處理當前目錄中每個PNG文件的示例。這一個甚至自動適應的字體大小,並將其裝配到可用的「寬×90%」 - 它是一個bash腳本(參見爲Win等效註釋):

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 

示例圖示爲一個原始和各自的輸出如下:

original image   image with caption

下面是一個使用-annotate,試圖建立一些東西超出了預設的參數的命令:

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

這是bash命令行嗎? – Serguzest 2013-03-19 22:19:24

+0

這是給Bash的,是的。在Windows/DOS上,語法將類似於(* .png)中的%i轉換....'。這裏沒有最後的'* done *','for'部分後面沒有分號。 – 2013-03-19 23:19:35

+0

謝謝,我實際上解決了它因爲Git而存在於我的窗口中的bash命令行。 – Serguzest 2013-03-20 17:13:05

16

這是一個非常古老的條目,但我每次搜索該主題時都會發現它,但它不起作用(至少對我而言)。這裏的東西,對我的作品:

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

希望這可以幫助別人......

+0

快速且容易理解,但許多圖像無法讀取。 – erik 2013-05-17 11:44:03

+0

如何在這裏指定文件名的特定字符?假設我想要添加文件名的前3個字符。我將如何做os'%f'{0:2}? – 2014-11-17 20:12:57

0

您還可以使用mogrify在文本添加一些圖片,一旦。

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

這會覆蓋現有圖像,因此請確保在執行此操作前已備份。