Position actuelle: Accueil> Derniers articles> Remarques lors du rendu du texte dans une image à l'aide d'imageFontWidth ()

Remarques lors du rendu du texte dans une image à l'aide d'imageFontWidth ()

M66 2025-06-04

Dans PHP, ImageFontWidth () est une fonction utilisée pour obtenir la largeur d'un seul caractère dans une police intégrée, généralement utilisée lors du dessin de texte sur une fonction ImageString () ou ImageStRing () . Cet article présentera des choses et des problèmes communs qui doivent être prêts attention lors de l'utilisation de la fonction ImageFontWidth () et aider les développeurs à mieux contrôler la disposition du texte dans les images.


1. Introduction à l'utilisation de base

ImageFontWidth (int $ font): int

  • La police du paramètre est de la taille de la police, et la plage de valeur est de 1 à 5, représentant les cinq polices intégrées en PHP.

  • La valeur de retour est la largeur d'un seul caractère dans la police, et l'unité est pixel.

Exemple de code:

 <?php
$font = 3; // Sélectionnez une taille de police
$charWidth = imagefontwidth($font);
echo "Font width is: " . $charWidth;
?>

2. Choses à noter

2.1 Applicable aux polices intégrées uniquement

ImageFontWidth () ne peut être utilisé que pour cinq polices intégrées à PHP (1-5) et ne peut pas être utilisée pour les polices personnalisées ou les polices de truetype (texte dessiné à l'aide d'imagettfText () ).

Si vous utilisez ImageTtFText () pour rendre du texte, vous devez utiliser la fonction ImageTtFBBox () pour obtenir la taille du texte, et non ImageFontWidth () .

2.2 La largeur du caractère est fixe

La police intégrée est une police monospace, et chaque caractère a une largeur fixe, donc en utilisant ImageFontWidth () est la largeur fixe d'un seul caractère. Si le texte contient des caractères multi-octets (tels que chinois), la largeur unique ne peut pas nécessairement s'appliquer car la police intégrée ne peut pas entièrement prendre en charge le chinois.

Exemple:

 <?php
$font = 4;
$charWidth = imagefontwidth($font);
$text = "Hello";
$textWidth = strlen($text) * $charWidth;
echo "Text width is: " . $textWidth;
?>

Pour les caractères chinois, parce que la police intégrée ne prend pas en charge le chinois à plusieurs octets, il y aura une erreur dans le calcul de la longueur avec strlen () , et vous devez utiliser mb_strlen () .

2.3 Faites attention au codage lors du calcul de la longueur de la chaîne

Si le texte est chinois ou d'autres caractères multilinants, l'utilisation de strlen () calculera le nombre d'octets au lieu de caractères, ce qui entraîne une erreur de largeur de calcul.

Il est recommandé d'utiliser mb_strlen () , par exemple:

 <?php
$text = "Test chinois";
$font = 3;
$charWidth = imagefontwidth($font);
$textWidth = mb_strlen($text, 'UTF-8') * $charWidth;
echo "Text width is: " . $textWidth;
?>

Cependant, il est toujours important de noter que la police intégrée ne peut pas afficher correctement le chinois, il est donc recommandé d'utiliser ImageTtFText () .

2.4 Limite de taille de police

ImageFontWidth () prend en charge uniquement les tailles de police 1 à 5. La gamme renvoie une erreur ou un résultat inexact.


3. Des questions et des solutions fréquemment posées

3.1 Exception d'affichage chinois

La police intégrée ne peut pas rendre le chinois et les Chinois seront affichés comme brouillants ou vides lors de l'appel ImageString () . Solution:

  • Utilisez la fonction ImageTtFText () pour charger des polices TTF qui prennent en charge le chinois.

  • Utilisez ImageTtFBBox () pour obtenir la taille des limites du texte, calculez la largeur et la hauteur.

Exemple:

 <?php
$im = imagecreatetruecolor(200, 50);
$white = imagecolorallocate($im, 255, 255, 255);
$black = imagecolorallocate($im, 0, 0, 0);
imagefilledrectangle($im, 0, 0, 200, 50, $white);

$fontfile = 'm66.net/fonts/simhei.ttf'; // L&#39;exemple de chemin ici est m66.net Remplacement du nom de domaine
$text = "Test chinois";
$fontsize = 20;
$bbox = imagettfbbox($fontsize, 0, $fontfile, $text);
$textWidth = $bbox[2] - $bbox[0];

imagettftext($im, $fontsize, 0, 10, 30, $black, $fontfile, $text);
header('Content-Type: image/png');
imagepng($im);
imagedestroy($im);
?>

3.2 Erreurs lors du calcul de la largeur de la chaîne

Lors du calcul de la largeur à l'aide d' imageFontWidth (), l'espacement des polices ou les largeurs de caractères spéciaux sont ignorés, ce qui entraîne des écarts lors du rendu du texte. À ce stade, vous pouvez essayer:

  • Pré-calculer la largeur, laissant la marge appropriée.

  • Utilisez des méthodes de mesure plus précises (telles que ImageTtFBBox () pour les polices TTF).


4. Résumé

matière illustrer
Seules les polices intégrées sont prises en charge Non disponible pour les polices personnalisées ou les polices TTF
Largeur de caractère fixe Convient aux polices monospatiales, ne peut pas calculer avec précision la largeur des caractères de plusieurs gobets
Support chinois Limited Les polices intégrées ne prennent pas en charge le chinois, il est recommandé d'utiliser ImagettfText ()
Faites attention au codage pour le calcul de la longueur Les Chinois devraient utiliser mb_strlen ()

En général, ImageFontWidth () est une fonction simple adaptée au traitement rapide des calculs de largeur du texte anglais simple, mais pour les exigences de police chinoises ou complexes, il est recommandé d'utiliser une fonction de traitement de police TrueType plus puissante.