現在の位置: ホーム> 最新記事一覧> ImageFontWidth()を使用して、ループレンダリング文字アニメーションを組み合わせます

ImageFontWidth()を使用して、ループレンダリング文字アニメーションを組み合わせます

M66 2025-06-05

PHPでキャラクターアニメーション効果を作成することは、JavaScriptやCSSを使用するほど直感的ではありませんが、 ImageFontWidth()などのGDライブラリの一部の関数を使用すると、興味深い動的特性効果を実現できます。この記事では、 ImageFontWidth()関数を使用してループを組み合わせて「アニメーション」のフレームシーケンスを生成し、最後にアニメーションをシミュレートする動的効果に出力する方法について説明します。

1。ThuldingImageFontWidth()

ImageFontWidth()は、指定されたフォント幅を取得するために使用されるPHP GDライブラリの関数です。その目的は、Imagestring()およびImagestringup()関数で使用されるピクセルでフォント幅を返すことです。この機能は、画像上の文字の正確な位置を制御するために特に適しています。

 $font = 5;
$charWidth = imagefontwidth($font);

この例では、フォントを5に設定し、 ImageFontWidth()を使用して各文字の幅を取得します。

2。アニメーションロジックを設計します

シンプルなアニメーション効果を作成しましょう。キャラクターが左から右に移動します。各フレームは画像であり、文字の位置はフレーム番号によって決定されます。 ImageFontWidth()を使用して、画像内の文字の水平オフセットを正確に計算します。

3。フレームシーケンスを生成するためのサンプルコード

<?php
$font = 5;
$char = '*';
$frameCount = 20;
$imageWidth = 200;
$imageHeight = 40;
$charWidth = imagefontwidth($font);

// 複数のフレームを動的に生成します
for ($frame = 0; $frame < $frameCount; $frame++) {
    $im = imagecreate($imageWidth, $imageHeight);
    $bgColor = imagecolorallocate($im, 255, 255, 255);
    $textColor = imagecolorallocate($im, 0, 0, 0);
    
    // 文字を計算します x 座標
    $x = ($charWidth * $frame) % $imageWidth;
    $y = ($imageHeight - imagefontheight($font)) / 2;
    
    imagestring($im, $font, $x, $y, $char, $textColor);

    // フレームを保存します PNG 書類
    $filename = "frame_$frame.png";
    imagepng($im, $filename);
    imagedestroy($im);
}
?>

上記のコードは、スクリプトの実行後に20個のPNG画像を生成し、各画像の*文字は前の画像よりも右に1文字の幅に移動されます。

4。フレームをアニメーションに統合します

PHP自体はGIFアニメーションを直接生成することはできませんが、ImageMagickなどの外部ツールを使用してこれらのフレームをGIFアニメーションに合成できます。

 convert -delay 10 -loop 0 frame_*.png animation.gif

または、 https://m66.net/tool/gifmakerにアクセスするなどのオンラインツールを使用して、これらの画像のフレームをアップロードしてアニメーションを合成します。

5。高度:逆の動きと循環

キャラクターの動きを前後に実装するには、 $フレームを「往復」シーケンスにマッピングできます。たとえば、:

 $step = $frame % ($frameCount * 2);
$offset = $step < $frameCount ? $step : (2 * $frameCount - $step - 1);
$x = ($charWidth * $offset) % $imageWidth;

このようにして、キャラクターは画像を前後に移動し、アニメーションの楽しみをさらに高めます。

要約します