En PHP, lorsque vous traitez la composition du texte de l'image, vous rencontrez souvent le problème de plusieurs lignes d'alignement du texte. En utilisant la fonction ImageFontWidth () dans la bibliothèque GD, vous pouvez facilement obtenir la largeur des caractères de la police spécifiée, réalisant ainsi une disposition et un alignement de texte plus précis. Cet article présentera en détail comment utiliser la fonction ImageFontWidth () pour calculer automatiquement la largeur de plusieurs lignes de texte pour aider à la disposition soignée du texte.
ImageFontWidth () est une fonction fournie par la bibliothèque GD pour obtenir la largeur de chaque caractère dans une police intégrée spécifiée, en pixels. Le prototype de fonction est le suivant:
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, correspondant aux cinq tailles de police intégrées à GD.
La fonction renvoie la largeur de chaque caractère dans la police.
Grâce à cette fonction, nous pouvons connaître le nombre de pixels occupés par chaque caractère du texte, calculant ainsi la largeur de l'ensemble du texte en fonction de la longueur de la chaîne.
Supposons que vous souhaitiez dessiner plusieurs lignes de texte sur l'image et que la largeur de chaque ligne soit centrée sur la largeur ou à gauche. Plusieurs lignes de texte ont souvent des longueurs différentes, et calculent directement la largeur de la chaîne et les dessiner, ce qui peut conduire à une disposition inégale, en particulier lorsque vous utilisez des polices monospatiales.
La solution consiste à utiliser d'abord ImageFontWidth () pour calculer la largeur d'un seul caractère, puis calculer la largeur de chaque ligne en fonction de la longueur de la chaîne, de manière à déterminer la coordonnée du point de départ du texte et d'atteindre l'alignement automatique.
L'exemple de code suivant montre comment utiliser la bibliothèque GD de PHP combinée à ImageFontWidth () pour obtenir l'alignement centré du texte multilin:
<?php
// Créer une image vierge
$width = 400;
$height = 200;
$image = imagecreatetruecolor($width, $height);
// Définir la couleur de l'arrière-plan et la couleur du texte
$bgColor = imagecolorallocate($image, 255, 255, 255); // Fond blanc
$textColor = imagecolorallocate($image, 0, 0, 0); // Texte noir
// Remplir l'arrière-plan
imagefilledrectangle($image, 0, 0, $width, $height, $bgColor);
// Plusieurs lignes de texte à dessiner
$textLines = [
"Ceci est la première ligne de texte",
"La deuxième ligne de texte est un peu plus longue",
"La troisième ligne"
];
// Sélectionnez une taille de police
$font = 5; // GDPolices intégrées,1-5entre
// Calculer la largeur et la hauteur de la police
$fontWidth = imagefontwidth($font);
$fontHeight = imagefontheight($font);
// Point de départ initial de dessinYcoordonner
$startY = 20;
// Itérer à travers chaque ligne de texte,Calculez la largeur et dessinez au centre
foreach ($textLines as $line) {
$lineLength = strlen($line); // Avis:Utilisé icistrlenConvient à l'anglais pur,Si vous avez le chinois, veuillez utilisermb_strlenEt assurez-vous que le codage du personnage est
$lineWidth = $fontWidth * $lineLength;
// calculerXcoordonner,Centre d'alignement
$x = ($width - $lineWidth) / 2;
// Dessiner du texte
imagestring($image, $font, $x, $startY, $line, $textColor);
// Ligne suivanteYcoordonner
$startY += $fontHeight + 10; // Espacement des lignes10Pixels
}
// Image de sortie
header("Content-Type: image/png");
imagepng($image);
imagedestroy($image);
?>
Calculez la largeur de texte de ligne actuelle par imageFontWidth () et strlen () ;
Utilisez la largeur de l'image pour soustraire la largeur du texte et divisez-la par 2 pour calculer la coordonnée x lorsqu'elle est centrée;
Dessinez plusieurs lignes de texte en séquence et ajustez la coordonnée Y pour atteindre l'effet de rupture des lignes;
Faites attention au calcul de la largeur des cordes chinoise. strlen () compte le nombre d'octets, ce qui peut entraîner des erreurs de calcul. Il est recommandé de combiner mb_strlen () et codage de caractères approprié.
ImageFontWidth () ne peut obtenir que la largeur d'un seul caractère, mais les caractères chinois sont généralement des multi-girés. Pour garantir la précision, il est préférable d'utiliser mb_strlen () :
$lineLength = mb_strlen($line, 'UTF-8');
Et confirmer que le fichier PHP et l'environnement d'exploitation prennent en charge le codage UTF-8.
La fonction ImageFontWidth () est un outil simple mais très pratique dans la bibliothèque PHP GD. Il peut aider les développeurs à calculer automatiquement les largeurs de texte multi-lignes et à obtenir une disposition et un alignement de texte plus raisonnables. En combinant des longueurs de chaîne pour calculer la largeur des pixels occupée par chaque ligne de texte, il est facile de taper dans le centrage ou tout autre alignement, simplifiant considérablement la complexité du traitement de mot d'image.