Position actuelle: Accueil> Derniers articles> Alternative: comment remplacer la fonction ImageFontWidth par ImageTtFBBox () pour obtenir une largeur de texte plus précise?

Alternative: comment remplacer la fonction ImageFontWidth par ImageTtFBBox () pour obtenir une largeur de texte plus précise?

M66 2025-06-11

Lors du traitement du texte de l'image en PHP, il est souvent nécessaire d'obtenir la largeur du texte pour une disposition et un positionnement faciles. Traditionnellement, de nombreux développeurs utiliseront la fonction ImageFontWidth () pour obtenir la largeur du caractère de la police intégrée. Cependant, comme ImageFontWidth () ne peut gérer que les polices intégrées (et la taille fixe), sa précision et sa flexibilité sont limitées, en particulier lors de l'utilisation de polices TrueType.

Cet article présentera comment remplacer ImageFontWidth () par la fonction ImageTtFBBox () pour obtenir une mesure de largeur de texte plus précise, en particulier adapté aux scénarios où les polices TTF sont librement utilisées.


1. Limites de ImageFontWidth ()

La fonction ImageFontWidth () accepte uniquement la taille de la police intégrée (1 à 5) et renvoie la largeur des caractères dans la police spécifiée (en pixels). Cependant, cette fonction ne peut pas mesurer la largeur globale d'une chaîne, et elle ne peut pas prendre en charge les tailles de police et les fichiers de police personnalisés.

 <?php
// Utilisation traditionnelle,Obtenez la taille de la police intégrée comme3La largeur d&#39;un personnage
$charWidth = imagefontwidth(3);
echo "Largeur du caractère: $charWidth";
?>

Cette méthode n'obtient pas avec précision la largeur d'une chaîne ou d'une police personnalisée.


2. Utilisez ImageTtFBBox () pour obtenir une largeur de texte plus précise

ImageTtFBBox () est une fonction fournie par PHP pour les polices TrueType. Il renvoie un tableau représentant les coordonnées de la boîte de délimitation du texte donné sur l'image. En calculant ces coordonnées, la largeur et la hauteur du texte peuvent être obtenues.

Prototype de fonction:

 array imagettfbbox(float $size, float $angle, string $fontfile, string $text)
  • $ taille : taille de police

  • $ angle : angle (généralement 0)

  • $ FONTFILE : Path de fichier de police (.TTF)

  • $ text : texte qui doit être mesuré

Valeur de retour:

Renvoie un tableau de 8 entiers représentant les quatre sommets de la boîte de délimitation de texte:

 0 => lower left X
1 => lower left Y
2 => lower right X
3 => lower right Y
4 => upper right X
5 => upper right Y
6 => upper left X
7 => upper left Y

3. Exemple de code pour calculer la largeur du texte

L'exemple suivant montre comment utiliser ImageTtFBBox () au lieu de ImageFontWidth () pour mesurer avec précision la largeur du texte.

 <?php
// Contenu du caractère
$text = "Hello, monde!";

// Taille de la police
$fontSize = 16;

// angle
$angle = 0;

// Chemin de fichier de police(Supposons que le fichier de police est situé sur le serveur)
$fontFile = 'm66.net/fonts/arial.ttf';

// Obtenez le tableau des boîtes à délimitation de texte
$bbox = imagettfbbox($fontSize, $angle, $fontFile, $text);

// Calculer la largeur
// Coin inférieur droitX - Coin inférieur gaucheX
$textWidth = abs($bbox[2] - $bbox[0]);

echo "La largeur du texte est: " . $textWidth . " Pixels";
?>

4. Exemple d'affichage de centrage dynamique basé sur la largeur du texte

Supposons que nous devons dessiner du texte dans une toile avec une largeur de 300px, nous pouvons d'abord utiliser ImageTtFBBox () pour obtenir la largeur du texte, puis calculer le point de départ:

 <?php
// Créer une toile
$imgWidth = 300;
$imgHeight = 50;
$image = imagecreatetruecolor($imgWidth, $imgHeight);

// Définition des couleurs
$bgColor = imagecolorallocate($image, 255, 255, 255);
$textColor = imagecolorallocate($image, 0, 0, 0);

// Remplir l&#39;arrière-plan
imagefill($image, 0, 0, $bgColor);

// Paramètres de texte et de police
$text = "Hello, monde!";
$fontSize = 20;
$angle = 0;
$fontFile = 'm66.net/fonts/arial.ttf';

// Obtenir la largeur du texte
$bbox = imagettfbbox($fontSize, $angle, $fontFile, $text);
$textWidth = abs($bbox[2] - $bbox[0]);
$textHeight = abs($bbox[5] - $bbox[1]);

// calculerXPoint de départ de l&#39;arbre,Atteindre le niveau central
$x = ($imgWidth - $textWidth) / 2;

// calculerYPoint de départ de l&#39;arbre,Réaliser le centrage vertical(Avis imagettftext Basé sur la ligne de base)
$y = ($imgHeight + $textHeight) / 2;

// Dessiner du texte
imagettftext($image, $fontSize, $angle, $x, $y, $textColor, $fontFile, $text);

// Image de sortie
header('Content-Type: image/png');
imagepng($image);
imagedestroy($image);
?>

5. Résumé

  • ImageFontWidth () ne convient qu'aux polices intégrées et a des fonctions simples;

  • Imagettfbbox () peut obtenir avec précision la taille des limites du texte de n'importe quelle police TTF et mesurer la largeur du texte plus précisément;

  • L'utilisation d'imagettfbbox () peut atteindre des exigences de positionnement en texte et de typographie plus flexibles, en particulier adaptées aux polices personnalisées et au texte complexe.

Grâce aux exemples introduits dans cet article, vous pouvez facilement remplacer ImageFontWidth () par ImagettFBBox () pour améliorer la précision et la flexibilité du traitement de mot d'image.