Lors de la création de filigranes d'image avec PHP, nous voulons souvent que le texte apparaisse avec précision à des endroits spécifiques de l'image, comme le coin inférieur droit ou le centre. Mais en raison de la taille de la police et de la largeur de chaque caractère, le calcul de la position du filigrane devient souvent gênant. Heureusement, la fonction ImageFontWidth () de PHP résout ce problème pour nous, en particulier lorsque vous utilisez des polices intégrées, ce qui peut nous aider à calculer avec précision la largeur du texte, réalisant ainsi un positionnement précis du texte.
ImageFontWidth () est l'une des fonctions de bibliothèque GD de PHP qui renvoie la largeur des pixels de chaque caractère dans un numéro de police spécifié. Sa syntaxe est la suivante:
int imagefontwidth(int $font);
Cette fonction ne convient qu'aux polices construites dans la bibliothèque GD, comme 1 à 5 . Si vous utilisez la police TTF chargée par ImageTtFText () , veuillez utiliser ImageTtFBBox () à la place pour calculer la taille.
Lorsque vous ajoutez des filigranes de texte à l'image, nous devons clarifier la largeur et la hauteur du texte de filigrane pour déterminer ses coordonnées de départ. Par exemple, si vous voulez que le filigrane apparaisse dans le coin inférieur droit, vous devez connaître la largeur du texte du filigrane afin qu'il puisse être soustrait du côté droit de l'image comme coordonnée X.
Mais de nombreuses personnes utilisent directement la longueur de la chaîne comme référence de largeur, ce qui est inexact. La largeur du caractère de chaque police peut être différente, et même dans la même police, les différentes largeurs de caractère peuvent être différentes (en particulier les polices monospatiales et élargir les polices).
Jetons un coup d'œil à un exemple spécifique. Nous voulons ajouter un texte dans le coin inférieur droit d'une image: «Copyright m66.net».
<?php
// Chargement des images
$image = imagecreatefromjpeg('background.jpg');
// Définir le numéro de police et le texte
$font = 4; // Numéro de police intégré 1-5
$text = 'tous droits réservés m66.net';
// Obtenez la largeur et la hauteur du texte
$textWidth = imagefontwidth($font) * strlen($text);
$textHeight = imagefontheight($font);
// Obtenir la taille de l'image
$imageWidth = imagesx($image);
$imageHeight = imagesy($image);
// Définir la couleur du texte(Blanc)
$textColor = imagecolorallocate($image, 255, 255, 255);
// Calculez les coordonnées du coin supérieur gauche du texte(Décalage dans le coin inférieur droit10Pixels)
$x = $imageWidth - $textWidth - 10;
$y = $imageHeight - $textHeight - 10;
// Écrire du texte
imagestring($image, $font, $x, $y, $text, $textColor);
// Image de sortie
header('Content-Type: image/jpeg');
imagejpeg($image);
// Détruire les ressources
imagedestroy($image);
?>
Dans ce code, ImageFontWidth ($ FONT) renvoie la largeur de chaque caractère, Strlen ($ text) renvoie le nombre de caractères, multipliant les deux pour obtenir la largeur des pixels de l'ensemble du texte. Soustrayez ensuite la largeur du texte et les marges de la largeur de l'image, et nous obtenons les coordonnées exactes du coin inférieur droit.
ImageFontWidth () est un outil simple mais très utile qui vous permet d'être plus précis lorsque vous traitez le positionnement du filigrane à l'aide de polices intégrées GD. Avec ImageFontheight () , vous pouvez contrôler avec précision n'importe quelle position (en haut à gauche, en haut à droite, au centre, etc.). Pour des situations où un rendu de texte plus complexe est requis, comme l'utilisation des polices TTF personnalisées, envisagez d'utiliser ImageTtFBBox () pour des calculs de limites plus complexes.
En utilisant ImageFontWidth () et ImageFontheight () , ajoutons les filigranes aux images deviennent également précises et efficaces.