2015-04-02 1 views
0

Je tente de créer une image texte avec ImageMagick, où le trait ne se déploie que vers l'extérieur. I found a solution, où je devrais utiliser la commande "-draw", mais avec elle j'aurais besoin de la taille de mon image, mais je ne le sais pas à l'avance.ImageMagick: redessiner un texte sans "-draw" pour le seul coup sortant

La commande ci-dessous doit être mise à niveau. D'une certaine façon, je dois attirer à nouveau le texte sur elle, sans strokeWidth:

convert -background none -fill white -pointsize 100 -stroke red \ 
     -strokewidth 20 label:text stroke.png 

@ solution de leu presque bon, mais le positionnement du nouveau texte n'est pas dans la bonne position. Mon résultat était que ci-dessus, et je ne sais pas où je pris une erreur:

enter image description here

+0

J'ai lu votre question plusieurs fois (et la réponse) et je n'ai toujours aucune idée de ce que vous voulez dire. Pouvez-vous essayer et mieux expliquer ce qu'un * "coup de sortie" * est s'il vous plaît? Et qu'est-ce qui ne va pas avec la réponse de Leu? –

+0

OK, mon objectif est, si j'ajoute un trait au texte, je veux voir le texte original, et la bordure seulement en dehors du texte. Donc, la bordure devrait laisser le texte original entier visible, seulement ajouter la bordure. – kree

Répondre

0

oui: dessiner le même texte sur votre image - peut-être par la sortie tuyauterie de votre commande à une autre convertir

convert -background none -fill white -pointsize 100 -stroke red \ 
     -strokewidth 20 label:text png:- \ 
| convert -fill white -pointsize 100 -stroke none \ 
      -draw 'text 10,82 "text"' - stroke.png 

l'astuce consiste à placer correctement la deuxième chaîne. La position x est la moitié de la course, mais la position y semble dépendre de la police et du point. Mon approche était à la première place les deux chaînes sur l'autre lorsque strokeWidth a été fixé à 0:

convert -background none -fill white -pointsize 100 -stroke red \ 
     -strokewidth 0 label:text png:- \ 
| convert -fill white -pointsize 100 -stroke none \ 
      -draw 'text 0,72 "text"' - stroke.png 

alors vous devez ajouter la moitié du strokeWidth à cette position y aussi bien.

un peu d'essai et d'erreur pour obtenir la position y correcte, mais il semble fonctionner pour toute chaîne.

== == modifier

bien sûr, on n'a pas besoin de faire d'essais et d'erreurs. Mais à la place, nous pouvons utiliser la puissance d'ImageMagick. Il suffit de réaliser les étapes suivantes (dans cet exemple de Bash):

#!/bin/bash 

# read text from command line (or use "Test Text") 
text=${1:-"Test Text"} 
# strokewidth 
sw=20 
# pointsize 
ps=120 
# font 
font=Arial 
# result file 
result="stroke.png" 

# do some calc 
sw_half=$(expr $sw/2) 

convert -background none -font $font -fill white -pointsize $ps -stroke red -strokewidth $sw label:"$text" $result 
convert -background none -font $font -fill white -pointsize $ps -stroke none label:"$text" png:- | composite -geometry +${sw_half}+${sw_half} - $result $result 

Vous pouvez obtenir la liste des polices disponibles sur votre système par

convert -list font 

L'idée est la même chose que ci-dessus: dessiner le texte deux fois et dessinez l'un sur l'autre en utilisant un décalage de la moitié de la course.

Les résultats ressemblent toutes les suivantes

enter image description here

+0

Merci pour votre réponse, mais le résultat n'est pas assez précis, le deuxième texte est décalé à droite de la position attendue. – kree

0

Ma suggestion: combiner label:"Some text" avec -annotate "Some text". Comme ceci:

#myfont="Arial-Black-Standard" 
#myfont="Tahoma" 
#offset="-0-0" 
#offset="-20-10" 
#offset="-30-10" 
#offset="-10+10" 

myfont="Tahoma" 
offset="+10+10" 

convert -respect-parentheses \ 
    \(      \ 
     -font "${myfont}" \ 
     -pointsize 180  \ 
     -strokewidth 18  \ 
     -fill blue   \ 
     -stroke blue   \ 
     -background none  \ 
     label:"Test text" \ 
    \)      \ 
    -gravity center   \ 
    -font "${myfont}"  \ 
    -pointsize 180   \ 
    -fill white    \ 
    -annotate "${offset}" "Test text" \ 
     result${offset}.png 

Jouer avec la variable offset=... (également avec la taille des points et des largeurs de course) pour se rapprocher de ce que vous voulez. Voici quelques-unes de mes résultats:

Cependant, comme @MarkSetchell, je ne comprends pas bien ce que vous voulez atteindre. Une explication de ce que vous entendez par "coup sortant" que I faire comprendre est manquant ...