Lorsque vous utilisez la bibliothèque GD de PHP pour le traitement du texte de l'image, vous rencontrez souvent le problème que la taille du texte ne correspond pas à la largeur spécifiée. Surtout lorsque nous voulons que le texte s'adapte parfaitement sur une certaine largeur sur l'image, l'ajustement de la taille de la police devient la clé. La fonction ImageFontWidth () dans PHP, combinée à la numérotation des polices, peut nous aider à calculer dynamiquement la largeur du texte, ajustant ainsi automatiquement la taille de la police afin que le texte remplisse simplement la largeur spécifiée.
Cet article introduira en détail comment utiliser ImageFontWidth () et le numéro de police pour obtenir l'effet de l'ajustement automatique de la taille du texte.
ImageFontWidth (int $ FONT) renvoie la largeur de caractères unique en pixels qui spécifie le numéro de police intégré. La bibliothèque GD a 5 polices intégrées, numéros 1 à 5 et la taille de la police augmente en séquence.
Numéro de police | Taille de police (pixels) | illustrer |
---|---|---|
1 | 5x8 | Police minimale |
2 | 6x12 | Polices plus petites |
3 | 7x13 | Police moyenne |
4 | 8x15 | Police plus grande |
5 | 9x15 | Police maximale |
Avec la numérotation des polices, nous pouvons rapidement obtenir la largeur de la police et calculer la largeur de l'ensemble du paragraphe de texte.
Supposons qu'il y ait un texte de texte et une largeur maximale maximale souhaitée, nous voulons que la largeur du texte ne dépasse pas la largeur maxon , et plus la police est grande, mieux c'est.
Les étapes sont les suivantes:
Commencez par le numéro de police maximum (5).
Multipliez ImageFontWidth () par la longueur du texte pour calculer la largeur de l'ensemble du paragraphe du texte.
Si la largeur est inférieure ou égale à maxaignée maximale , sélectionnez la taille de la police.
Si tous sont dépassés, sélectionnez la police minimale.
Voici un exemple complet de la façon de sélectionner automatiquement la taille de police appropriée et de dessiner du texte sur l'image:
<?php
// Contenu du caractère
$text = "Exemple de taille de police automatique";
// Largeur maximale attendue(unité:Pixels)
$maxWidth = 200;
// Essayez le numéro de police de5arriver1
$font = 5;
for ($i = 5; $i >= 1; $i--) {
$textWidth = imagefontwidth($i) * strlen($text);
if ($textWidth <= $maxWidth) {
$font = $i;
break;
}
}
// Créer une image,La largeur est $maxWidth,La hauteur est la hauteur de la police
$fontHeight = imagefontheight($font);
$im = imagecreatetruecolor($maxWidth, $fontHeight + 10);
// Distribution des couleurs
$bgColor = imagecolorallocate($im, 255, 255, 255); // Fond blanc
$textColor = imagecolorallocate($im, 0, 0, 0); // Texte noir
// Remplir l'arrière-plan
imagefilledrectangle($im, 0, 0, $maxWidth, $fontHeight + 10, $bgColor);
// Calculez le début du texteXcoordonner,Réaliser le centrage
$textWidth = imagefontwidth($font) * strlen($text);
$x = ($maxWidth - $textWidth) / 2;
$y = 5;
// Texte de sortie
imagestring($im, $font, $x, $y, $text, $textColor);
// Image de sortie
header('Content-Type: image/png');
imagepng($im);
imagedestroy($im);
?>
Cette méthode utilise les caractéristiques de largeur fixe de la police intégrée de la bibliothèque GD pour calculer rapidement la largeur du texte.
strlen () convient aux personnages anglais et à un octet. S'il contient chinois et autres caractères multi-octets, il est recommandé d'utiliser mb_strlen () et d'ajuster la logique de calcul.
Si vous avez besoin d'utiliser des polices TTF, vous pouvez utiliser ImageTtFBBox () pour obtenir des largeurs de texte plus précises.
Cette solution est simple et efficace, adaptée aux scénarios de demande rapide.