Dans la fonction de traitement d'image de PHP, ImageFtText () est un outil très puissant. Il permet aux développeurs de rendre du texte sur des images à l'aide de polices personnalisées, ce qui est particulièrement important dans les scénarios d'application tels que la génération de codes de vérification, les filigranes d'image et les graphiques dynamiques. Cependant, de nombreux développeurs rencontreront des problèmes liés à la compatibilité des polices lors de l'utilisation de l'imageftText () :
Cet article fournira une explication complète de ces problèmes et fournira des solutions pratiques.
ImageFtText () est essentiellement une interface PHP encapsulée à la bibliothèque Freetype. Freetype est un moteur de police largement utilisé, donc le format de police pris en charge par ImageFtText () dépend principalement du format pris en charge par Freetype.
À partir de maintenant, les formats de police communs et stables comprennent:
.TTF (Font TrueType)
.otf (police OpenType)
.TTC (collection TrueType) (certains systèmes prennent en charge)
.pfa / .pfb (police de type 1)
Parmi eux, .TTF et .OTF sont les formats les plus courants et les plus recommandés.
Description de la question:
$image = imagecreatetruecolor(400, 100);
$white = imagecolorallocate($image, 255, 255, 255);
$fontPath = '/path/to/fonts/myfont.ttf';
imagefttext($image, 20, 0, 10, 40, $white, $fontPath, 'Hello, world!');
Si le fichier de police est corrompu, incompatible ou si le chemin est mauvais, il amènera PHP à signaler une erreur ou une défaillance de rendu.
Solution:
Confirmez que le fichier de police existe et dispose d'autorisations de fichiers appropriées.
Utilisez un fichier de police .TTF ou .otf vérifié.
Vous pouvez télécharger et tester la compatibilité des polices telles que https://gitbox.net/fonts/ .
Description du problème: La police est normale mais des personnages non anglais tels que chinois, coréen, japonais et autres ne peuvent pas être affichés correctement.
Solution:
Utilisez des polices qui prennent en charge le jeu de caractères cible (comme Noto Sans CJK , simhei.ttf , Microsoft Yahei.ttf , etc.).
Assurez-vous que le fichier PHP lui-même est codé à l'aide de UTF-8.
Il peut être défini par:
$text = 'Bonjour,monde!';
$text = mb_convert_encoding($text, 'UTF-8', 'auto');
imagefttext($image, 20, 0, 10, 50, $white, $fontPath, $text);
Solution:
Le chemin du fichier de police doit être un chemin absolu et aucune adresse de chemin ou d'URL relative ne peut être utilisée. Il est recommandé de placer des fichiers de police dans un répertoire fixe sur le serveur, par exemple:
$fontPath = __DIR__ . '/fonts/arial.ttf';
Si vous souhaitez utiliser des polices à partir d'une adresse distante, vous pouvez d'abord les télécharger et les enregistrer dans la zone locale à l'aide de File_get_Contents et File_Put_Contents :
$remoteFont = 'https://gitbox.net/fonts/myfont.ttf';
$localFont = '/tmp/myfont.ttf';
file_put_contents($localFont, file_get_contents($remoteFont));
Solution:
Utilisez ImageCreateTrueColor () au lieu d' imageRereate () .
La taille de la police est recommandée comme pas moins de 12 pt.
Si la sortie est PNG ou WebP, assurez-vous qu'aucune compression ou mise à l'échelle supplémentaire n'est effectuée.
Certaines polices, bien que .TTF ou .OTF , ne prennent pas nécessairement en charge tous les caractères. Il est recommandé d'utiliser le test suivant:
function testFontSupport($fontPath, $char = 'toi') {
$img = imagecreatetruecolor(100, 50);
$white = imagecolorallocate($img, 255, 255, 255);
$black = imagecolorallocate($img, 0, 0, 0);
imagefill($img, 0, 0, $white);
imagefttext($img, 20, 0, 10, 30, $black, $fontPath, $char);
header('Content-Type: image/png');
imagepng($img);
imagedestroy($img);
}
Vous pouvez confirmer rapidement l'image de résultat avec le navigateur.
Type de question | Solutions recommandées |
---|---|
Police non reconnue | Utilisez le fichier .ttf / .otf pour confirmer que le chemin est correct |
Brouillé ou non affiché | Utiliser des polices multilingues |
Chargement des polices de réseau | Téléchargez la police à utiliser localement |
Mauvais effet d'affichage | Créer une toile à l'aide d' imageCreateTrueColor () |
Enfin, il est recommandé que les développeurs coopèrent toujours avec le mécanisme de gestion des erreurs lors de l'utilisation de fichiers ImageFtText () et de chargement de la police de test à l'avance pour assurer le fonctionnement stable du programme.
Si vous avez besoin de quelques échantillons de police communs, vous pouvez visiter https://gitbox.net/fonts/ pour afficher et télécharger des ressources de police gratuites couramment utilisées.