2010-11-05 11 views
10

So che il comando di ImageMagick annotate può sovrapporre del testo a un'immagine, ma può usare il nome file dell'immagine come questo testo? Avrei pensato di sì, ma non riesco a trovare una documentazione diretta che lo confermi.Sovrapposizione del nome file di un'immagine usando ImageMagick (o simile)

Senza dubbio alcune combinazioni di parametri possono gestirlo o esiste un modo migliore di farlo in uno script?

risposta

11

risposta di Eric L. è corretta - uno da me per questo! - ma -annotate non ti dà molto controllo sull'aspetto del testo.

Se si cerca la bellezza, quindi piuttosto andare per qualcosa che utilizza -composite. È possibile utilizzare un comando IM per costruire prima un'immagine di sovrapposizione (che utilizza uno sfondo semitrasparente) e quindi sovrapporla sull'immagine originale.

Ecco un esempio di come farlo con -composite anziché -annotate, utilizzando un approccio basato su script che elabora tutti i file PNG nella directory corrente. Questo si adatta anche automaticamente la dimensione del carattere e si inserisce nel campo "width * 90%" a disposizione - si tratta di uno script Bash (vedi commenti per Win equivalente):

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 

Un'illustrazione esempio per un originale e la rispettiva uscita sono di seguito:

original image   image with caption!

Ecco un comando che utilizza -annotate, cercando di impostare un paio di cose al di là dei parametri di default:

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

È per la riga di comando bash? – Serguzest

+0

Questo è per Bash, sì. Su Windows/DOS, la sintassi sarebbe qualcosa come 'per% i in (* .png) do convert .... '. Nessun finale '* done *' qui, e nessun punto e virgola dopo la parte 'for'. –

+0

Grazie, in realtà ho risolto la linea di comando bash che esiste nelle mie finestre a causa di Git. – Serguzest

16

È una voce molto vecchia ma la trovo ogni volta che cerco questo argomento e non funziona (almeno per me). Ecco qualcosa che funziona per me:

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

Spero che questo aiuti qualcuno ...

+0

Veloce e facile da capire, ma su molte immagini illeggibili. – erik

+0

Come specificheresti i caratteri specifici del nome del file qui? Diciamo che volevo aggiungere i primi 3 caratteri del nome del file. Come posso fare os '% f' {0: 2}? –

0

è anche possibile utilizzare mogrify per aggiungere del testo al gruppo di immagini a una volta.

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

Questo sovrascriverà le immagini esistenti, quindi assicurati di avere un backup prima di eseguirlo.

Problemi correlati