La commande "convert" d'ImageMagick ne peut pas utiliser de polices!

10
convert -size 300x50 xc:none -font Arial -pointsize 20 -gravity center -draw "fill white text 1,1 \"$1\" text 0,0 \"$1\" fill black text -1,-1 \"$1\"" $WATERMARK_FILE

La commande ci-dessus entraîne l'erreur suivante:

convert.im6: unable to read font `Arial' @ warning/annotate.c/RenderType/853.

J'ai cherché sur le Web et j'ai constaté que de nombreux utilisateurs ont vu cette erreur, mais n'ont trouvé aucune solution. Quelqu'un peut-il aider?

REMARQUE 1: la police Arial est installée sur mon système:

$ fc-list | grep -i arial
/usr/share/fonts/truetype/msttcorefonts/Arial_Italic.ttf: Arial:style=Italic,Cursiva,kurzíva,kursiv,Πλάγια,Kursivoitu,Italique,Dőlt,Corsivo,Cursief,Kursywa,Itálico,Курсив,İtalik,Poševno,nghiêng,Etzana
/usr/share/fonts/truetype/msttcorefonts/ariblk.ttf: Arial Black:style=Regular,Normal,obyčejné,Standard,Κανονικά,Normaali,Normál,Normale,Standaard,Normalny,Обычный,Normálne,Navadno,Arrunta
/usr/share/fonts/truetype/msttcorefonts/Arial.ttf: Arial:style=Regular,Normal,obyčejné,Standard,Κανονικά,Normaali,Normál,Normale,Standaard,Normalny,Обычный,Normálne,Navadno,thường,Arrunta
/usr/share/fonts/truetype/msttcorefonts/arialbd.ttf: Arial:style=Bold,Negreta,tučné,fed,Fett,Έντονα,Negrita,Lihavoitu,Gras,Félkövér,Grassetto,Vet,Halvfet,Pogrubiony,Negrito,Полужирный,Fet,Kalın,Krepko,đậm,Lodia
/usr/share/fonts/truetype/msttcorefonts/Arial_Bold_Italic.ttf: Arial:style=Bold Italic,Negreta cursiva,tučné kurzíva,fed kursiv,Fett Kursiv,Έντονα Πλάγια,Negrita Cursiva,Lihavoitu Kursivoi,Gras Italique,Félkövér dőlt,Grassetto Corsivo,Vet Cursief,Halvfet Kursiv,Pogrubiona kursywa,Negrito Itálico,Полужирный Курсив,Tučná kurzíva,Fet Kursiv,Kalın İtalik,Krepko poševno,nghiêng đậm,Lodi etzana
/usr/share/fonts/truetype/msttcorefonts/arialbi.ttf: Arial:style=Bold Italic,Negreta cursiva,tučné kurzíva,fed kursiv,Fett Kursiv,Έντονα Πλάγια,Negrita Cursiva,Lihavoitu Kursivoi,Gras Italique,Félkövér dőlt,Grassetto Corsivo,Vet Cursief,Halvfet Kursiv,Pogrubiona kursywa,Negrito Itálico,Полужирный Курсив,Tučná kurzíva,Fet Kursiv,Kalın İtalik,Krepko poševno,nghiêng đậm,Lodi etzana
/usr/share/fonts/truetype/msttcorefonts/Arial_Black.ttf: Arial Black:style=Regular,Normal,obyčejné,Standard,Κανονικά,Normaali,Normál,Normale,Standaard,Normalny,Обычный,Normálne,Navadno,Arrunta
/usr/share/fonts/truetype/msttcorefonts/Arial_Bold.ttf: Arial:style=Bold,Negreta,tučné,fed,Fett,Έντονα,Negrita,Lihavoitu,Gras,Félkövér,Grassetto,Vet,Halvfet,Pogrubiony,Negrito,Полужирный,Fet,Kalın,Krepko,đậm,Lodia
/usr/share/fonts/truetype/msttcorefonts/ariali.ttf: Arial:style=Italic,Cursiva,kurzíva,kursiv,Πλάγια,Kursivoitu,Italique,Dőlt,Corsivo,Cursief,Kursywa,Itálico,Курсив,İtalik,Poševno,nghiêng,Etzana

REMARQUE 2: la modification de la casse dans le nom de police ( arialau lieu de Arial) n'aide pas.

REMARQUE 3: l' utilisation du chemin de fichier de police absolu avec le nom de fichier de police complet ( filename.fileextension) supprime l'erreur:

convert -size 300x50 xc:none -font "/usr/share/fonts/truetype/msttcorefonts/Arial.ttf" -pointsize 20 -gravity center -draw "fill white text 1,1 \"$1\" text 0,0 \"$1\" fill black text -1,-1 \"$1\"" $WATERMARK_FILE
Apprenant PHP
la source
Avant de poster comme réponse: je l'ai résolu en utilisant un chemin absolu vers la police en question. Je ne sais pas pourquoi. Faites-moi savoir si cela fonctionne :)
Jacob Vlijm
Veuillez modifier votre question et publier la sortie de fc-list | grep -i arial. La commande que vous montrez a fonctionné pour moi sans erreur. Avez-vous installé Arial?
terdon
@terdon, sur Ubuntu, c'est un problème courant. Je n'ai jamais trouvé d'explication cependant.
Jacob Vlijm
@JacobVlijm vraisemblablement, il s'agit alors du nom de la police dans le cache de polices. Peut-être qu'il a besoin de minuscules arialou que le nom est légèrement différent. Vous devez également avoir msttcorefontsinstallé, je pense.
terdon
1
@terdon Quand je suis tombé dessus (c'était quelque chose pour Parto: askubuntu.com/questions/552456/… ) J'ai tout essayé: majuscules / minuscules, également tous les types de polices sans succès. Sur certains articles (pas AU), je suis tombé sur la suggestion d'utiliser des chemins absolus. A fonctionné, sans la satisfaction de comprendre pourquoi.
Jacob Vlijm

Réponses:

12

Arial n'est pas une police gratuite. Ses conditions d'utilisation sur les plateformes open source comme Linux et Ubuntu rendent impossible la distribution dans le cadre d'une installation. Vous devez utiliser l' une des alternatives libres / ouvertes telles que Libération.

Vous pouvez répertorier les polices dont vous disposez convert -list font. Par exemple:

$ convert -list font|grep Liberation-Sans
Font: Liberation-Sans-Bold
Font: Liberation-Sans-Bold-Italic
Font: Liberation-Sans-Italic
Font: Liberation-Sans-Narrow-Bold
Font: Liberation-Sans-Narrow-Bold-Italic
Font: Liberation-Sans-Narrow-Italic
Font: Liberation-Sans-Narrow-Regular
Font: Liberation-Sans-Regular
meuh
la source
Je peux vous assurer que cela n'a rien à voir avec cela. Toutes les polices fonctionnent si des chemins absolus sont utilisés. As-tu essayé?
Jacob Vlijm
3
Cher meuh, ce n'est pas lié à la licence de police ou au copyright. C'est juste lié au nom de la police dans mon système. Votre réponse m'a guidé à utiliser la $ convert -list font | grep "Font:" | grep Arialcommande et il a donné lieu : Font: Arial-Black-Regular Font: Arial-Bold Font: Arial-Bold-Italic Font: Arial-Italic Font: Arial-Regular. Je comprends donc que je dois utiliser "Arial-Regular" au lieu de "Arial" comme nom de police. Veuillez mettre à jour votre réponse!
PHP Learner
Cette liste est vide
theonlygusti
3

J'ai eu le même problème avec mon Macbook aujourd'hui. La cause en est simple.

convert utilise uniquement des polices connues. Toutes les polices connues à convertir sont répertoriées avec cette commande.

convert -list font

Ma police désirée était dedans ~/Library/Fonts. convert ne l'a pas répertorié.

J'ai suivi les instructions de Mark Setchell et j'étais capable de générer mon type.xml.

L'entrée de ma police dans type.xml

<type format="ttf"
  name="MyriadPro"
  fullname="MyriadPro-Regular"
  family="Myriad Pro" 
  glyphs="/Users/vinh/Library/Fonts/myriadpro-regular.ttf"/> 

Je peux utiliser le nom ou le chemin absolu pour générer mon image.

convert -size 300x50 xc:none -font "MyriadPro" \
  -pointsize 20 -kerning 1 -gravity center \
  -fill black -annotate 0x0+0+0 "mimacom" \
  -fill white -annotate 0x0+2+2 "mimacom" mimacom.png
cinhtau
la source