En PHP, la bibliothèque GD couramment utilisée fournit une multitude de fonctions qui peuvent nous aider à générer des images dynamiquement. Cet article se concentre sur la façon d'utiliser la combinaison des fonctions ImageFontWidth () et ImageCopy () pour réaliser des effets de carte texte. La carte dite du texte est de "couper" le texte en petits morceaux ou cartes, puis de le faire pivoter sur l'image cible pour obtenir une forme d'expression de texte plus flexible.
ImageFontWidth (int $ font): int
Renvoie la largeur de caractère de police intégrée, $ Font est l'identification de la taille de la police, avec les valeurs 1-5. Cette fonction est utile pour déterminer la largeur du texte et facilite le calcul de la position d'épissage.
ImageCopy (ressource $ dst_im, ressource $ src_im, int $ dst_x, int $ dst_y, int $ src_x, int $ src_y, int $ src_y, int $ src_w, int $ src_h): bool
Copiez une zone de l'image source à l'emplacement spécifié de l'image cible. Peut être utilisé pour copier et coller des caractères individuels ou couper des pièces de texte.
Préparez l'image source contenant le texte requis (généralement le texte est écrit sur une petite image).
Selon la largeur de la police et le nombre de caractères, des morceaux de caractères sont tirés de l'image source.
Copiez les blocs de caractères sur la position spécifiée de l'image cible à leur tour à travers la fonction ImageCopy () .
Ajustez les paramètres de position pour obtenir l'effet de carte texte cohérente.
<?php
// Créer une image cible(Fond blanc)
$dst_width = 300;
$dst_height = 50;
$dst_im = imagecreatetruecolor($dst_width, $dst_height);
$white = imagecolorallocate($dst_im, 255, 255, 255);
imagefill($dst_im, 0, 0, $white);
// Carte source,Supposons que c'est du texte"HELLO"Postes,La largeur et la hauteur sont la largeur de chaque caractère*Numéro de caractère et hauteur du caractère
// Lorsque vous l'utilisez, vous devez préparer une ressource d'image contenant du texte complet.
$src_im = imagecreatefrompng('http://m66.net/images/letters.png');
// Réglez la taille de la police(Polices intégrées,1-5)
$font = 5;
$char_width = imagefontwidth($font);
$char_height = imagefontheight($font);
// Texte à publier
$text = "HELLO";
$len = strlen($text);
// Calculez la position de départ du texte,centrer le texte
$start_x = ($dst_width - $char_width * $len) / 2;
$start_y = ($dst_height - $char_height) / 2;
// Copie de personnage par personnage
for ($i = 0; $i < $len; $i++) {
$char = $text[$i];
// ASCIICompenser,假设Carte source文字排列是从'A'Commencez à organiser en continu
$offset = ord($char) - ord('A');
$src_x = $offset * $char_width;
$src_y = 0;
// Copiez un seul caractère sur le graphique cible
imagecopy(
$dst_im,
$src_im,
$start_x + $i * $char_width,
$start_y,
$src_x,
$src_y,
$char_width,
$char_height
);
}
// Image de sortie
header('Content-Type: image/png');
imagepng($dst_im);
// Libérer les ressources
imagedestroy($dst_im);
imagedestroy($src_im);
?>
Cet exemple suppose que le diagramme de matériau texte ( Letters.png ) est une image avec des lettres disposées horizontalement dans l'ordre, avec la largeur d'un seul caractère multiplié par le nombre de caractères et la hauteur de la hauteur de la police.
ImageFontWidth () et ImageFontheight () nous aident à obtenir avec précision la largeur et la hauteur des caractères, ce qui facilite la copie motorisée.
Si le contenu texte est complexe, vous pouvez également utiliser ImageTtFText () pour rendre la police avant le traitement, ou utiliser ImageCopyResampled () pour atteindre la mise à l'échelle.
Avec cette méthode, vous pouvez créer des effets d'animation de texte intéressants, des autocollants de style fragment de lettres et même des filigranes personnalisés.