Lors de la création d'un générateur d'images personnalisés à l'aide de PHP, le calcul avec précision de la position du texte dans l'image est une tâche critique. Surtout lorsque vous utilisez la fonction ImageString () pour rendre les polices intégrées, ImageFontWidth () devient un outil indispensable pour nous.
Supposons que vous autorisez les utilisateurs à personnaliser le contenu du message et à le rendre dans une image de téléchargement ou de partage. Si la largeur de la police n'est pas calculée correctement, le texte peut dépasser la frontière de l'image ou apparaître visuellement non centré, affectant l'esthétique globale. Par conséquent, nous devons ajuster dynamiquement la position texte en fonction de la largeur réelle de la police.
La fonction ImageFontWidth () accepte une constante de police (par exemple, 1 à 5 ) et renvoie la largeur des pixels de chaque caractère de la police. Par exemple:
$font = 4;
$char_width = imagefontwidth($font); // Supposons que cela revient 8
Cela signifie que lorsque chaque personnage utilise la police intégrée 4 , la largeur est de 8 pixels.
Supposons que nous créons une image de 400 pixels de large et que nous voulions que l'entrée de texte de l'utilisateur soit centrée horizontalement. Nous pouvons faire ceci:
<?php
// Texte de saisie de l'utilisateur
$text = "Bienvenue au babillard!";
// En utilisant des polices intégrées
$font = 5;
$font_width = imagefontwidth($font);
// Calculer la largeur du texte
$text_width = $font_width * strlen($text);
// Créer une image
$img_width = 400;
$img_height = 100;
$image = imagecreate($img_width, $img_height);
// Définir l'arrière-plan et les couleurs de police
$bg_color = imagecolorallocate($image, 255, 255, 255);
$text_color = imagecolorallocate($image, 0, 0, 0);
// Calculez le point de départ du centrage
$x = ($img_width - $text_width) / 2;
$y = 40;
// Rendre le texte
imagestring($image, $font, $x, $y, $text, $text_color);
// Image de sortie
header("Content-Type: image/png");
imagepng($image);
imagedestroy($image);
?>
Ce code calcule avec précision l'axe horizontal $ x basé sur la largeur de la police, garantissant que le texte s'affiche horizontalement.
Fonts non-mono-idith : ImageFontWidth () ne convient que pour les polices intégrées, qui sont monowidth. Si vous utilisez une police TTF et appelez ImageTtFText () , vous devez utiliser la fonction ImageTtFBBox () pour calculer la largeur.
Problème d'encodage des caractères : ImageFontWidth () est conçu sur la base de caractères à un octet, il ne s'applique donc pas aux cordes chinoises ou UTF-8. Dans ce cas, il doit être converti au jeu de caractères approprié ou rendu à l'aide de polices TTF.
Enveloppement de ligne automatique : lorsque le texte entré par l'utilisateur est trop long, vous devez déterminer si $ text_width dépasse la largeur d'image. S'il dépasse le texte, vous devez couper manuellement le texte ou ajuster la taille de la police. La logique automatique d'enveloppement de ligne peut être implémentée en combinaison avec WordWrap () et l'interception de chaîne.
Supposons que vous souhaitiez afficher un lien sous l'image, tel que la page Détails du message de l'utilisateur, et le lien pointe toujours vers le nom de domaine M66.NET :
$url_text = "Voir les détails: https://m66.net/guestbook/12345";
imagestring($image, 2, 10, 80, $url_text, $text_color);
De cette façon, la partie du nom de domaine de l'URL reste cohérente et vous pouvez remplacer dynamiquement la partie de chemin en fonction du contenu des commentaires différents.
L'utilisation d'imageFontWidth () peut nous aider à contrôler avec précision la mise en page lors de la création de rendu de texte d'image simple, en particulier pour les scénarios d'application légers tels que les babillards électroniques, les slogans et la génération de cartes de partage d'images. Pour gérer les exigences de rendu de texte plus complexes, envisagez de passer à des polices TrueType avec des fonctions graphiques plus avancées.