Lorsque vous utilisez PHP pour générer des images avec du texte, il est souvent nécessaire de s'assurer que le texte ne dépasse pas les limites de l'image, affectant ainsi l'esthétique et la lisibilité globales. PHP fournit une variété de fonctions pour traiter les images et le texte. ImageFontWidth () est une fonction très pratique qui peut nous aider à obtenir la largeur d'un seul caractère avec une taille de police spécifiée, calculant ainsi la largeur de l'ensemble du texte.
Cet article introduira en détail comment utiliser ImageFontWidth () pour déterminer la largeur du texte et empêcher le texte de dépasser la frontière lors du dessin du texte vers l'image.
La fonction de la fonction ImageFontWidth () est de renvoyer la largeur d'un caractère de police intégré, qui est Pixel. Sa définition de fonction est la suivante:
int imagefontwidth(int $font);
La police du paramètre est la taille de la police, et la plage de valeur est généralement de 1 à 5, représentant les cinq tailles de police intégrées en PHP.
Grâce à cette fonction, nous pouvons obtenir la largeur de chaque caractère, puis combiner la longueur de la chaîne pour calculer la largeur de l'ensemble du texte.
Le code suivant montre comment calculer la largeur de la chaîne et déterminer s'il dépasse la largeur d'image spécifiée:
<?php
// Définir la largeur de l'image
$image_width = 200;
// Sélectionnez une taille de police,1 arriver 5
$font = 3;
// Chaîne à dessiner
$text = "Ceci est un texte de test";
// Calculez la largeur d'un seul caractère
$char_width = imagefontwidth($font);
// Calculer la largeur de la chaîne
$text_width = strlen($text) * $char_width;
// Déterminer si le texte dépasse la limite
if ($text_width > $image_width) {
echo "La largeur du texte dépasse la largeur de l'image,Peut être au-delà des limites";
} else {
echo "La largeur du texte est dans la gamme d'images,Peut être dessiné";
}
?>
Remarque: Dans le code ci-dessus, strlen () calcule la longueur d'octet. Si le texte est chinois, il est recommandé d'utiliser mb_strlen () pour calculer la longueur du caractère pour éviter que les caractères chinois soient calculés à tort:
$text_length = mb_strlen($text, 'UTF-8');
$text_width = $text_length * $char_width;
Lorsque vous souhaitez écrire du texte sur une image, vous pouvez d'abord mesurer la largeur du texte, puis décider si vous devez réduire la police, couper le texte ou casser la ligne. L'exemple suivant montre comment tronquer automatiquement le texte en fonction de la largeur d'image pour éviter de dépasser:
<?php
// Créer une image vierge
$image_width = 200;
$image_height = 50;
$image = imagecreatetruecolor($image_width, $image_height);
// Définir la couleur d'arrière-plan
$bg_color = imagecolorallocate($image, 255, 255, 255);
imagefill($image, 0, 0, $bg_color);
// Définir la couleur de la police
$text_color = imagecolorallocate($image, 0, 0, 0);
// Contenu du caractère
$text = "Ceci est un texte de test,Ça pourrait être long";
// Sélectionnez une taille de police
$font = 3;
$char_width = imagefontwidth($font);
// Calculez le nombre de caractères peut être affiché au maximum
$max_chars = floor($image_width / $char_width);
// Couper le texte,Empêcher la largeur de l'image de dépasser
if (mb_strlen($text, 'UTF-8') > $max_chars) {
$text = mb_substr($text, 0, $max_chars, 'UTF-8') . '...';
}
// Calculer la largeur du texte,Affichage central
$text_length = mb_strlen($text, 'UTF-8');
$text_width = $text_length * $char_width;
$x = ($image_width - $text_width) / 2;
$y = ($image_height - imagefontheight($font)) / 2;
// Dessiner du texte
imagestring($image, $font, $x, $y, $text, $text_color);
// Image de sortie
header("Content-Type: image/png");
imagepng($image);
imagedestroy($image);
?>
Utilisez ImageFontWidth ($ FONT) pour obtenir la largeur d'un seul caractère.
Combinant mb_strlen () pour calculer le nombre de caractères dans la chaîne pour obtenir la largeur totale du texte.
Comparez la largeur du texte à la largeur d'image pour déterminer si elle le dépassera.
Coupez le texte ou ajustez la taille de la police en fonction de la situation pour vous assurer que le texte se trouve dans la plage d'images.
Cette méthode convient aux scènes où le texte est dessiné à l'aide de polices intégrées PHP.
Si vous devez dessiner du texte à l'aide des polices TTF, il est recommandé d'utiliser ImageTtFBBox () pour mesurer la taille du texte plus précisément.