PHPでは、 ImageFontWidth()関数を使用して、組み込みフォントの文字幅を取得します。この関数の目的は、画像内の文字列の表示幅を計算するためにGDライブラリが提供する組み込みフォント(数字1〜5)と組み合わせて使用することです。シンプルで使いやすいですが、 ImageFontWidth()関数は、開発者を混乱させるTrueTypeフォントなどのカスタムフォントを使用する場合、機能しません。
この記事では、ImageFontWidth()関数がカスタムフォントとその背後にある技術的理由と互換性がない理由を詳細に説明し、カスタムフォント幅を正しく取得する方法のソリューションを提供します。
ImageFontWidth()関数は次のように定義されます。
int imagefontwidth ( int $font )
パラメーター$フォントは、1〜5の範囲の値を持つ組み込みのフォント番号です。
返品値は、フォント内の文字の固定幅(ユニット:ピクセル)です。
この関数は、GDライブラリに付属のフォントのみを処理でき、フォントは固定幅のビットマップフォントであり、文字幅は同じです。
内蔵フォントは、 GDライブラリによって事前に定義されたビットマップフォントで、文字幅が固定されており、既知です。
カスタムフォントは通常、ベクトルフォント(TrueType Font.ttfなど)、可変文字幅(比例フォント)、および各文字の異なる幅を備えたものです。
ImageFontWidth()関数の設計前提は、フォントが固定幅であり、組み込みのフォント番号によって識別され、フォントファイルを読み取る機能がないことです。
カスタムフォントは、functions imagettftext()またはimagettfbbox()によって描画されます。これは、フォントファイルをロードして複雑なフォントメトリックを使用して文字幅と高さを計算します。 ImageFontWidth()は、フォントファイルで文字サイズを認識して計算できません。
カスタムフォントの場合、正しい方法はimagettfbbox()関数を使用することです。
array imagettfbbox ( float $size , float $angle , string $fontfile , string $text )
$サイズ:フォントサイズ
$角:回転角度(通常0)
$ fontfile :フォントファイルパス
$テキスト:測定する文字列
文字列の四隅の座標を表す8つの要素の配列を返します。これらの座標を計算することにより、文字列の幅と高さを取得できます。
<?php
// フォントサイズ
$size = 16;
// 回転角
$angle = 0;
// カスタムフォントパス
$fontfile = 'm66.net/fonts/arial.ttf';
// 測定する文字列
$text = "Hello World";
// テキスト境界ボックスを取得します
$bbox = imagettfbbox($size, $angle, $fontfile, $text);
// 幅を計算します
$width = abs($bbox[2] - $bbox[0]);
echo "文字列幅はです: " . $width . " ピクセル";
?>
この例では、 $ bbox [0]および$ bbox [2]は、それぞれ文字列の左下角と右下の角のx座標を表します。文字列の幅は、2つを差し引き、絶対値を取得することで取得できます。
質問 | 解決 |
---|---|
ImageFontWidth()は、カスタムフォント幅を測定できません | imagettfbbox()とフォントファイルを組み合わせて文字列幅を計算します |
カスタムフォントテキストを描画する必要があります | imageTtring ()またはyumagestringup()の代わりにimagettftext()を使用します |
フォントファイルパスが正しくてアクセス可能であることを確認し、機能エラーを回避します。
ImageTtfbbox()負の値を含む可能性のある座標を返し、幅を計算するにはABS()が必要です。
フォントのサイズと角度は幅に影響を及ぼし、パラメーター設定はニーズに応じて調整する必要があります。
この記事の導入を通じて、 ImageFontWidth()関数が組み込みのフォントにのみ適している理由を理解し、 ImageTtfbbox()を使用してカスタムフォント文字列の幅を測定する正しい方法をマスターして、レイアウトを回避し、機能の選択によって引き起こされる問題を避けます。