Lors du traitement des images en PHP, diverses fonctions fournies par la bibliothèque GD sont souvent utilisées pour dessiner du texte. ImageFontWidth () est l'une des fonctions utilisées pour obtenir la largeur de police intégrée. Cependant, de nombreux développeurs constateront que la fonction ImageFontWidth () ne fonctionne pas correctement lorsque vous essayez d'utiliser la police TrueType. Cet article analysera les raisons de ce phénomène en profondeur.
ImageFontWidth () est une fonction de la bibliothèque PHP GD, qui renvoie la largeur de caractère de la police intégrée spécifiée. Son prototype de fonction est le suivant:
imagefontwidth(int $font): int
La police de paramètre $ est un entier représentant le nombre de la police intégrée (1 à 5). Cette fonction prend uniquement en charge les polices intégrées prédéfinies par la bibliothèque GD.
La bibliothèque PHP GD prend en charge deux méthodes de dessin de police principales:
Fonts intégrés : dessinés à travers des polices bitmap incluses dans la bibliothèque GD, ces polices sont fixes (1 à 5), de petite taille, de vitesse rapide, mais limité dans le style.
TRUETYPE FONT (TTF) : Avec des fonctions telles que ImageTtFText () , les fichiers de police .TTF externes peuvent être utilisés pour prendre en charge plus de styles et un rendu de texte de meilleure qualité.
Au début de la conception de la fonction ImageFontWidth () , interrogeant uniquement la largeur fixe de la police intégrée. Sa logique d'implémentation est basée sur des données de police prédéfinies, plutôt que sur les fichiers de police d'analyse dynamiquement. Les raisons spécifiques sont les suivantes:
Les polices intégrées sont des polices bitmap fixes <br> La largeur de caractère de la police intégrée est prédéfinie et fixe, et ImageFontWidth () peut renvoyer directement la valeur de largeur correspondante.
Les polices TrueType nécessitent une analyse dynamique
Les fichiers de police TrueType contiennent des données vectorielles complexes, la largeur des caractères dépend des informations de mesure dans le fichier de police et différentes largeurs de caractères peuvent être différentes (police proportionnelle). ImageFontWidth () n'a pas la possibilité d'analyser les fichiers TTF.
Positionnement fonctionnel différent
ImageFontWidth () est une fonction d'assistance conçue pour les polices intégrées. La tâche de gérer la largeur de la police TTF est généralement effectuée par des fonctions comme ImageTtFBBox () . Il peut renvoyer la boîte de délimitation du texte, calculant ainsi la largeur et la hauteur réelles de la chaîne.
Pour les polices TrueType, il est recommandé d'utiliser la fonction ImageTtFBBox () :
<?php
$fontFile = 'm66.net/fonts/arial.ttf'; // Veuillez vous assurer que le chemin du fichier de police est correct
$fontSize = 12;
$text = "Hello, world!";
// Obtenez la boîte de délimitation du texte
$bbox = imagettfbbox($fontSize, 0, $fontFile, $text);
// Calculer la largeur
$width = abs($bbox[4] - $bbox[0]);
echo "La largeur du texte est: " . $width . " Pixels";
?>
Imagettfbbox () renvoie un tableau contenant 8 éléments, qui sont les coordonnées des quatre coins du texte. En calculant la valeur de différence de coordonnées horizontales, la largeur du texte peut être obtenue.
ImageFontWidth () ne peut être utilisé que pour les polices intégrées GD et ne peut pas gérer les polices TrueType.
Le calcul de la largeur de police TrueType nécessite la fonction ImageTtFBBox () .
Comprendre les différences entre les deux aidera à utiliser correctement la bibliothèque GD pour obtenir un dessin de texte de haute qualité.