Maison  >  Article  >  développement back-end  >  Que faire si les caractères chinois de la chaîne d'images php sont tronqués

Que faire si les caractères chinois de la chaîne d'images php sont tronqués

藏色散人
藏色散人original
2020-08-19 09:32:483044parcourir

Les caractères chinois tronqués dans la chaîne d'images php sont dus au fait que la bibliothèque GD2 elle-même n'a pas de polices chinoises. La solution consiste à spécifier une police pour afficher la chaîne de sortie.

Que faire si les caractères chinois de la chaîne d'images php sont tronqués

Recommandé : "Tutoriel vidéo PHP"

La fonction imagestring affiche des caractères chinois tronqués

1. Description du problème

Lorsque j'ai appris à filigraner des images, j'ai utilisé la bibliothèque de fonctions d'extension GD intégrée à PHP et la chaîne d'images utilisée dans le didacticiel vidéo ( ressource $image , int $font , int $x , int $y, string $s, int $col) Dans des applications pratiques, il a été constaté que cette fonction ne peut pas afficher normalement les filigranes chinois et affiche des caractères chinois tronqués.

2. Processus de solution

En interrogeant le manuel PHP du site officiel, imagestring : tracez une ligne de chaîne horizontalement, imagestring() utilise la couleur col pour dessiner la chaîne s vers le x de l'image. représenté par image , à la coordonnée y (c'est la coordonnée du coin supérieur gauche de la chaîne, et le coin supérieur gauche de l'image entière est 0, 0). Si la police est 1, 2, 3, 4 ou 5, la police intégrée est utilisée.

Le deuxième paramètre $font de cette fonction est le paramètre de police, mais le responsable indique seulement que si la valeur est définie sur 1-5, la police intégrée sera utilisée. Cependant, grâce à des tests, elle sera utilisée. a été constaté que les soi-disant polices intégrées 1-5 ne sont pas normales. De plus, le document officiel n'explique pas si d'autres valeurs et d'autres fichiers de polices autres que 1 à 5 peuvent être utilisés. Le test a révélé que lorsque ce paramètre est défini sur d'autres fichiers de polices, il ne peut pas être utilisé normalement.

En interrogeant le contenu pertinent en ligne, il s'avère que dans la plupart des cas, le chinois ne peut pas être affiché car la bibliothèque GD2 elle-même n'est pas causée par les polices chinoises, spécifiez donc la police à afficher la chaîne de sortie. Si vous souhaitez afficher le chinois sur l'image, vous devez utiliser la fonction imagettftext (ressource $image, float $size, float $angle, int $x, int $y, int $color, string $fontfile, string $text). La description officielle de cette fonction est la suivante : Utiliser la police TrueType pour écrire du texte sur l'image

Le deuxième paramètre de cette fonction est également un fichier de police, qui doit pointer vers un fichier de police au format ttf. Il a été constaté que le chinois peut être affiché normalement. $font est le chemin du fichier de police. Lorsque le fichier de police est placé dans le même répertoire que le fichier php, c'est le nom du fichier de police.

On trouve également dans le manuel PHP imagefttext (resource$image, float$size, float$angle, int$x, int$y, int$color, string$fontfile, string$text [, array$ extrainfo ] )t function,

La description officielle de cette fonction est : Utilisez la police FreeType 2 pour écrire du texte dans l'image, très similaire à la fonction imagettftext ci-dessus. Seuls les types de fichiers de polices référencés sont différents, vous pouvez donc peut-être également afficher le chinois à l'aide de cette fonction. Mais je suis trop paresseux pour l'essayer. . . Si vous êtes intéressé, vous pouvez l'essayer.

J'ai découvert par hasard que sous le système Ubuntu, le fichier de police utilisé est placé dans le répertoire du même niveau que le php Lorsque $font est le nom du fichier, je trouve que la fonction ne peut pas prendre effet. normalement. J'ai trouvé imagettftext() en interrogeant le journal des erreurs. : Impossible de trouver/ouvrir la police, j'ai appris grâce à la requête Baidu que dans le système Linux, il n'est pas possible de simplement définir $font comme nom de fichier. le chemin, tel que './xxx.ttf' (chemin relatif) ou ' /usr/share/fonts/xxx.ttf' (chemin absolu). Le test a révélé qu'il peut être affiché normalement.

3. Résumé :

imagestring peut difficilement afficher le chinois normalement, il existe peut-être d'autres méthodes. Cependant, il est recommandé d'utiliser imagettftext, qui est simple et pratique. Il vous suffit d'importer un fichier de police.

Le paramètre $font de la fonction imagettftext doit uniquement être défini sur le nom du fichier dans le système de fenêtres et le fichier de police se trouvera dans le répertoire courant. Cependant, dans le système Linux, le chemin doit être. spécifié, qui est ./.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn