Faire des effets d'animation de caractère dans PHP n'est pas aussi intuitif que l'utilisation de JavaScript ou CSS, mais avec certaines fonctions de la bibliothèque GD, telles que ImageFontWidth () , nous pouvons toujours obtenir des effets de caractère dynamiques intéressants. Cet article expliquera comment utiliser la fonction ImageFontWidth () pour combiner une boucle pour générer une séquence de trame de "animation" des caractères, et la publier enfin dans un effet dynamique qui simule l'animation.
ImageFontWidth () est une fonction de la bibliothèque PHP GD utilisée pour obtenir la largeur de police spécifiée. Son objectif est de retourner la largeur de la police dans les pixels utilisés par les fonctions ImageString () et ImageString () . Cette fonction nous convient particulièrement pour contrôler la position exacte des caractères sur l'image.
$font = 5;
$charWidth = imagefontwidth($font);
Dans cet exemple, nous définissons la police sur 5 et utilisons ImageFontWidth () pour obtenir la largeur de chaque caractère.
Construisons un effet d'animation simple: un personnage se déplace de gauche à droite. Chaque trame est une image et la position des caractères est déterminée par le numéro de trame. Utilisez ImageFontWidth () pour calculer avec précision le décalage horizontal des caractères dans une image.
<?php
$font = 5;
$char = '*';
$frameCount = 20;
$imageWidth = 200;
$imageHeight = 40;
$charWidth = imagefontwidth($font);
// Générer dynamiquement plusieurs images
for ($frame = 0; $frame < $frameCount; $frame++) {
$im = imagecreate($imageWidth, $imageHeight);
$bgColor = imagecolorallocate($im, 255, 255, 255);
$textColor = imagecolorallocate($im, 0, 0, 0);
// Calculer les caractères x coordonner
$x = ($charWidth * $frame) % $imageWidth;
$y = ($imageHeight - imagefontheight($font)) / 2;
imagestring($im, $font, $x, $y, $char, $textColor);
// Enregistrer le cadre en tant que PNG document
$filename = "frame_$frame.png";
imagepng($im, $filename);
imagedestroy($im);
}
?>
Le code ci-dessus générera 20 images PNG une fois le script exécuté, et les * caractères de chaque image sont déplacés d'une largeur de caractère vers la droite que le précédent.
Bien que PHP lui-même ne puisse pas générer directement des animations GIF, nous pouvons utiliser des outils externes tels que ImageMagick pour synthétiser ces cadres en animations GIF:
convert -delay 10 -loop 0 frame_*.png animation.gif
Ou utilisez des outils en ligne, tels que la visite de https://m66.net/tool/gifmaker pour télécharger ces cadres d'images pour synthétiser les animations.
Pour implémenter le mouvement des caractères dans les deux sens, vous pouvez cartographier $ frame à une séquence "aller-retour", par exemple:
$step = $frame % ($frameCount * 2);
$offset = $step < $frameCount ? $step : (2 * $frameCount - $step - 1);
$x = ($charWidth * $offset) % $imageWidth;
De cette façon, les personnages se déplaceront dans l'image, améliorant davantage le plaisir de l'animation.