現在の位置: ホーム> 最新記事一覧> 自動フォントスケーリング:ImageFontWidth()とFont番号の調整を組み合わせます

自動フォントスケーリング:ImageFontWidth()とFont番号の調整を組み合わせます

M66 2025-05-31

画像テキスト処理にPHPのGDライブラリを使用する場合、テキストサイズが指定された幅と一致しないという問題に遭遇することがよくあります。特に、テキストを写真の特定の幅に完全に適合させたい場合は、フォントサイズを調整することがキーになります。 PHPのImageFontWidth()関数は、フォント番号と組み合わせて、テキストの幅を動的に計算するのに役立ち、それにより、テキストが指定された幅を埋めるようにフォントサイズを自動的に調整します。

この記事では、ImageFontWidth()とFont番号を使用して、テキストサイズを自動的に調整する効果を実現する方法を詳細に紹介します。


1。ImageFontWidth ()およびフォント番号を理解します

ImageFontWidth(int $ font)ビルトインフォント番号を指定するピクセルの単一文字の幅を返します。 GDライブラリには、5つの組み込みフォント、1〜5の数字があり、フォントサイズは順番に増加します。

フォント番号フォントサイズ(ピクセル)説明します
1 5x8最小フォント
2 6x12より小さなフォント
3 7x13ミディアムフォント
4 8x15大きなフォント
5 9x15最大フォント

フォント番号を使用すると、フォント幅をすばやく取得し、テキストの段落全体の幅を計算できます。


2。フォントサイズを自動的に調整するコアアイデア

テキストテキストと目的の最大幅maxwidthがあるとし、テキスト幅を最大幅を超えないようにし、フォントを大きくするほど良いとします。

手順は次のとおりです。

  1. 最大フォント番号(5)から始めます。

  2. ImageFontWidth()をテキストの長さを掛けて、テキストの段落全体の幅を計算します。

  3. 幅がmaxwidth以下の場合は、フォントサイズを選択します。

  4. すべてを超えている場合は、最小フォントを選択します。


3。コードの例

適切なフォントサイズを自動的に選択し、画像にテキストを描画する方法の完全な例を次に示します。

 <?php
// 文字内容
$text = "自動フォントサイズの例";
// 予想される最大幅(ユニット:ピクセル)
$maxWidth = 200;

// からフォント番号を試してください5到着1
$font = 5;
for ($i = 5; $i >= 1; $i--) {
    $textWidth = imagefontwidth($i) * strlen($text);
    if ($textWidth <= $maxWidth) {
        $font = $i;
        break;
    }
}

// 写真を作成します,幅はです $maxWidth,高さはフォントの高さです
$fontHeight = imagefontheight($font);
$im = imagecreatetruecolor($maxWidth, $fontHeight + 10);

// 色の分布
$bgColor = imagecolorallocate($im, 255, 255, 255);  // 白い背景
$textColor = imagecolorallocate($im, 0, 0, 0);      // 黒いテキスト

// 背景を埋めます
imagefilledrectangle($im, 0, 0, $maxWidth, $fontHeight + 10, $bgColor);

// テキストの開始を計算しますX座標,センターリングを実現します
$textWidth = imagefontwidth($font) * strlen($text);
$x = ($maxWidth - $textWidth) / 2;
$y = 5;

// 出力テキスト
imagestring($im, $font, $x, $y, $text, $textColor);

// 出力画像
header('Content-Type: image/png');
imagepng($im);
imagedestroy($im);
?>

4。説明

  • この方法では、GDライブラリの組み込みフォントの固定幅特性を使用して、テキスト幅をすばやく計算します。

  • strlen()は、英語とシングルバイトの文字に適しています。中国語およびその他のマルチバイト文字が含まれている場合は、 mb_strlen()を使用して計算ロジックを調整することをお勧めします。

  • TTFフォントを使用する必要がある場合は、 imagettfbbox()を使用して、より正確なテキスト幅を取得できます。

  • このソリューションはシンプルで効率的で、迅速な需要シナリオに適しています。


5。リファレンスリンク