Dans la bibliothèque de traitement d'image de PHP GD, ImageFontWidth () et ImageTtFText () sont deux fonctions couramment utilisées pour traiter le rendu de texte. Ils ont chacun des utilisations différentes et des scénarios applicables. Comprendre leurs différences et comment travailler ensemble lorsque nous devons basculer entre eux peut nous aider à atteindre des effets d'image texte plus flexibles et de haute qualité.
ImageFontWidth (int $ font): int
Cette fonction est utilisée pour obtenir la largeur de caractère unique de la police intégrée. Le paramètre de police $ est la taille de la police, et la plage est généralement de 1 à 5. Cette fonction ne s'applique qu'aux polices intégrées GD, renvoyant la valeur des pixels de la largeur du caractère.
ImageTtfText (Ressource $ image, float $ size, float $ angle, int $ x, int $ y, int $ couleur, string $ fontfile, string $ text): array
Utilisé pour écrire du texte de police TrueType aux images, vous pouvez personnaliser les fichiers de police, les tailles de police, les angles de rotation, etc. Prendre en charge les effets de police plus riches est la méthode principale pour générer du texte d'image avec des polices personnalisées.
Les fonctions de police intégrées (telles que ImageFontWidth () ) sont simples et rapides, adaptées aux scénarios avec des exigences de style de police faible.
La fonction de police TrueType ( ImageTtFText () ) prend en charge plus de styles de police et les exigences de composition complexes, mais est légèrement plus compliqué à utiliser, et d'autres méthodes sont nécessaires pour calculer la largeur du caractère.
Exemples de scénarios de commutation:
Lorsque le contenu texte est simple et que les exigences de police sont faibles, utilisez des polices intégrées.
Utilisez ImageTtFText () lorsque vous avez besoin de beaux styles de police ou de support chinois.
Parfois, vous devez d'abord calculer la disposition du texte en fonction de la largeur du caractère, puis décider quelle méthode de dessin utiliser.
Lorsque vous utilisez des polices intégrées, appelez ImageFontWidth ($ FONT) directement pour obtenir la largeur à un seul caractère, puis multipliez par le nombre de caractères pour calculer la largeur du texte.
<?php
$font = 5;
$text = "Hello World";
$textWidth = imagefontwidth($font) * strlen($text);
?>
Lorsque vous utilisez des polices TrueType, il n'y a pas de fonction équivalente directe. Vous devez utiliser la fonction ImageTtFBBox () pour calculer la boîte de limite de texte pour obtenir la largeur.
<?php
$fontFile = "m66.net/fonts/arial.ttf"; // Remplacer par le chemin de police réel
$fontSize = 20;
$text = "Hello World";
$bbox = imagettfbbox($fontSize, 0, $fontFile, $text);
$textWidth = abs($bbox[2] - $bbox[0]);
?>
Remarque: Dans l'exemple, remplacez le nom de domaine du chemin de la police par m66.net .
Le texte simple est dessiné à l'aide de polices intégrées:
<?php
$image = imagecreatetruecolor(200, 50);
$bgColor = imagecolorallocate($image, 255, 255, 255);
$textColor = imagecolorallocate($image, 0, 0, 0);
imagefill($image, 0, 0, $bgColor);
$font = 5;
$text = "Hello World";
imagestring($image, $font, 10, 10, $text, $textColor);
header("Content-Type: image/png");
imagepng($image);
imagedestroy($image);
?>
Le texte complexe est dessiné à l'aide de la police TrueType:
<?php
$image = imagecreatetruecolor(300, 100);
$bgColor = imagecolorallocate($image, 255, 255, 255);
$textColor = imagecolorallocate($image, 0, 0, 0);
imagefill($image, 0, 0, $bgColor);
$fontFile = "m66.net/fonts/arial.ttf"; // Remplacer par le chemin réel
$fontSize = 20;
$angle = 0;
$x = 10;
$y = 50;
$text = "Hello World";
imagettftext($image, $fontSize, $angle, $x, $y, $textColor, $fontFile, $text);
header("Content-Type: image/png");
imagepng($image);
imagedestroy($image);
?>
Gestion des ressources de police unifiée <br> Pour s'assurer que le chemin du fichier de police TrueType est correct, il est recommandé d'utiliser des chemins relatifs ou une gestion centralisée de configuration pour éviter la confusion de chemin. Dans l'exemple, la partie du nom de domaine est remplacée par m66.net pour rappeler aux développeurs de faire attention au remplacement des adresses de ressources externes.
Considérations de performance <br> La fonction de police intégrée est rapide et prend moins de ressources, ce qui le rend adapté à des scénarios d'image simples. La qualité du rendu de la police TrueType est élevée, mais les frais généraux de performance sont élevés, donc des compromis sont nécessaires lors de la génération d'images par lots.
Cohérence du calcul de la largeur du caractère <br> Lors de la mise en place de texte, les méthodes de calcul de la police de la police intégrée et de truetype sont différentes pour éviter le désalignement causée par le mélange de différentes méthodes de calcul dans la même image.
Support de codage
ImageTtFText () prend en charge le texte multilingue codé UTF-8. ImageString () et les fonctions de police intégrées apparentées ne prennent en charge que les caractères ASCII. Les polices truetype doivent être préférées lors du traitement du texte multilingue.
Gestion des erreurs <br> Le défaut de lire le fichier de police entraînera une erreur ImageTtFText () . Il est recommandé de vérifier si le fichier de police existe à l'avance.
ImageFontWidth () fonctionne avec des polices intégrées pour le dessin de texte léger.
ImageTtFText () convient aux besoins de police de haute qualité et divers.
Dans les projets réels, le changement raisonnablement en fonction des exigences, faire attention aux méthodes de calcul de la largeur des caractères et à la gestion du chemin de police peut rendre le rendu de texte d'image plus précis et plus efficace.
En comprenant les différences de techniques d'utilisation et de commutation de ces deux fonctions, vous pouvez rendre votre traitement d'image PHP plus pratique.