Dans PHP, la fonction ImageFontWidth () est utilisée pour obtenir la largeur de caractère de la police intégrée. Le but de cette fonction doit être utilisé en conjonction avec les polices intégrées (numéros 1 à 5) fournies par la bibliothèque GD pour calculer la largeur d'affichage de la chaîne dans l'image. Bien qu'il soit simple et facile à utiliser, la fonction ImageFontWidth () ne fonctionne pas lors de l'utilisation de polices personnalisées telles que des polices TrueType, ce qui confond souvent les développeurs.
Cet article expliquera en détail pourquoi la fonction ImageFontWidth () est incompatible avec les polices personnalisées et les raisons techniques derrière elle, et donner une solution à la façon d'obtenir correctement les largeurs de police personnalisées.
La fonction ImageFontWidth () est définie comme suit:
int imagefontwidth ( int $font )
La police du paramètre est le numéro de police intégré, avec des valeurs allant de 1 à 5.
La valeur de retour est la largeur fixe (unité: pixels) d'un caractère dans la police.
Cette fonction ne peut gérer que les polices fournies avec la bibliothèque GD, et les polices sont des polices bitmap de largeur fixe et la largeur de caractère est la même.
La police intégrée est une police bitmap prédéfinie par la bibliothèque GD, avec des largeurs de caractères fixes et connue.
Les polices personnalisées sont généralement des polices vectorielles (telles que TrueType Font.TTF), avec des largeurs de caractères variables (polices proportionnelles) et différentes largeurs pour chaque caractère.
La prémisse de conception de la fonction ImageFontWidth () est que la police est d'une largeur fixe et est identifiée par un numéro de police intégré, et il n'y a pas de fonction pour lire le fichier de police.
Les polices personnalisées sont dessinées par des fonctions ImageTtFText () ou ImageTtFBBox () , qui calculent la largeur et la hauteur des caractères en chargeant des fichiers de police et en utilisant des métriques de police complexes. ImageFontWidth () ne peut tout simplement pas reconnaître et calculer la taille des caractères dans les fichiers de police.
Pour les polices personnalisées, la bonne façon est d'utiliser la fonction ImageTtFBBox () :
array imagettfbbox ( float $size , float $angle , string $fontfile , string $text )
$ taille : taille de police
$ angle : angle de rotation (généralement 0)
$ FontFile : chemin de fichier de police
$ text : chaîne à mesurer
Renvoie un tableau de 8 éléments représentant les coordonnées des quatre coins de la chaîne. En calculant ces coordonnées, vous pouvez obtenir la largeur et la hauteur de la chaîne.
<?php
// Taille de la police
$size = 16;
// Angle de rotation
$angle = 0;
// Chemin de police personnalisé
$fontfile = 'm66.net/fonts/arial.ttf';
// La chaîne à mesurer
$text = "Hello World";
// Obtenez la boîte de délimitation du texte
$bbox = imagettfbbox($size, $angle, $fontfile, $text);
// Calculer la largeur
$width = abs($bbox[2] - $bbox[0]);
echo "La largeur de la chaîne est: " . $width . " Pixels";
?>
Dans cet exemple, $ bbox [0] et $ bbox [2] représentent les coordonnées x dans les coins inférieurs gauche et inférieur droit de la chaîne, respectivement. La largeur de la chaîne peut être obtenue en soustrayant les deux et en prenant la valeur absolue.
question | Solution |
---|---|
ImageFontWidth () ne peut pas mesurer la largeur de police personnalisée | Calculer la largeur de chaîne à l'aide d'imagettfbbox () combinée avec des fichiers de police |
Besoin de dessiner du texte de police personnalisé | Utilisez ImageTtFText () au lieu d'imageString () ou d'imageStRing () |
Assurez-vous que le chemin du fichier de police est correct et accessible et évitez les erreurs de fonction.
Imagettfbbox () renvoie les coordonnées qui peuvent contenir des valeurs négatives, et ABS () est nécessaire pour calculer la largeur.
La taille et l'angle de la police ont un impact sur la largeur, et les paramètres doivent être ajustés en fonction des besoins.
Grâce à l'introduction de cet article, vous devez comprendre la raison pour laquelle la fonction ImageFontWidth () ne convient que pour les polices intégrées, et maîtriser la bonne façon d'utiliser ImageTtFBBox () pour mesurer la largeur des chaînes de police personnalisées, afin d'éviter les problèmes de mise en page et d'affichage causés par une mauvaise sélection de fonctions.