2010-11-05 20 views
10

Je sais que la commande annotate de ImageMagick peut superposer du texte sur une image, mais peut-elle utiliser le nom de fichier de l'image comme texte? Je l'aurais supposé ainsi, mais ne peux pas sembler trouver la documentation directe qui confirme ceci.Superposition du nom de fichier d'une image en utilisant ImageMagick (ou similaire)

Sans aucun doute, une combinaison de paramètres peut gérer cela, ou y a-t-il une meilleure façon de le faire dans un script?

Répondre

11

Réponse de Eric L. est correcte - 1 de moi pour ça! - mais -annotate ne vous donne pas beaucoup de contrôle sur l'apparence du texte.

Si vous cherchez des prettyness, alors optez plutôt pour quelque chose qui utilise -composite. Vous pouvez utiliser une commande IM pour construire d'abord une image de superposition (qui utilise un arrière-plan semi-transparent), puis la superposer à l'image originale.

Voici un exemple de la façon de le faire avec -composite au lieu de -annotate, en utilisant une approche par script qui traite chaque fichier PNG dans le répertoire courant. Celui-ci même adapte automatiquement la taille de la police et se glisse dans la « largeur * 90% » disponible - il est un script Bash (voir les commentaires pour Win équivalent):

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 exemple illustration pour l'original et la sortie respective sont ci-dessous:

original image   image with caption!

Voici une commande qui utilise -annotate, en essayant de mettre quelques choses au-delà des paramètres par défaut:

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

Est-ce pour la ligne de commande bash? – Serguzest

+0

Ceci est pour Bash, oui. Sous Windows/DOS, la syntaxe serait quelque chose comme 'for% i in (* .png) convertit ....'. Pas de '* done *' final ici, et pas de point-virgule après la partie 'for'. –

+0

Merci, je l'ai effectivement résolu bash commandline qui existe dans mes fenêtres à cause de Git. – Serguzest

16

C'est une entrée très ancienne mais je la trouve chaque fois que je recherche ce sujet, et ça ne marche pas (pour moi au moins). Voici quelque chose qui fonctionne pour moi:

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

Hope this helps quelqu'un ...

+0

Rapide et facile à comprendre, mais sur de nombreuses images illisibles. – erik

+0

Comment spécifieriez-vous des caractères spécifiques du nom de fichier ici? Disons que je voulais ajouter les 3 premiers caractères du nom de fichier. Comment ferais-je os '% f' {0: 2}? –

0

Vous pouvez également utiliser mogrify pour ajouter du texte tas d'images à une fois que. Cela va remplacer les images existantes, donc assurez-vous d'avoir une sauvegarde avant d'exécuter cette opération.