PHPを使用してテキストで写真を生成する場合、テキストが画像の境界を超えないようにする必要があることがよくあります。 PHPは、画像とテキストを処理するためのさまざまな機能を提供します。 ImageFontWidth()は、指定されたフォントサイズの単一文字の幅を取得するのに役立つ非常に実用的な機能であり、それによってテキスト全体の幅を計算します。
この記事では、ImageFontWidth()を使用してテキストの幅を決定し、テキストを画像に描画するときに境界を超えるのを防ぐ方法を詳細に紹介します。
ImageFontWidth()関数の関数は、ビルトインフォント文字であるピクセルの幅を返すことです。その関数定義は次のとおりです。
int imagefontwidth(int $font);
パラメーター$フォントはフォントサイズで、値範囲は通常1〜5で、PHPの5つの組み込みフォントサイズを表します。
この関数を通じて、各文字の幅を取得し、文字列の長さを組み合わせてテキスト全体の幅を計算できます。
次のコードは、文字列幅を計算し、指定された画像幅を超えるかどうかを判断する方法を示しています。
<?php
// 画像幅を設定します
$image_width = 200;
// フォントサイズを選択します,1 到着 5
$font = 3;
// 描画する文字列
$text = "これはテストテキストです";
// 単一の文字の幅を計算します
$char_width = imagefontwidth($font);
// 文字列幅を計算します
$text_width = strlen($text) * $char_width;
// テキストが境界を超えるかどうかを判断します
if ($text_width > $image_width) {
echo "テキスト幅は画像幅を超えています,境界を越えている可能性があります";
} else {
echo "テキスト幅は画像範囲内です,描くことができます";
}
?>
注:上記のコードでは、 strlen()がバイトの長さを計算します。テキストが中国語の場合は、 MB_STRLEN()を使用して文字の長さを計算して、漢字が誤って計算されないようにすることをお勧めします。
$text_length = mb_strlen($text, 'UTF-8');
$text_width = $text_length * $char_width;
画像にテキストを書きたい場合は、まずテキストの幅を測定してから、フォントを削減する必要があるか、テキストを切り取るか、行を破る必要があるかを決定できます。次の例は、画像の幅に基づいてテキストを自動的に切り捨てて、超えないことを示しています。
<?php
// 空白の画像を作成します
$image_width = 200;
$image_height = 50;
$image = imagecreatetruecolor($image_width, $image_height);
// 背景色を設定します
$bg_color = imagecolorallocate($image, 255, 255, 255);
imagefill($image, 0, 0, $bg_color);
// フォントの色を設定します
$text_color = imagecolorallocate($image, 0, 0, 0);
// 文字内容
$text = "これはテストテキストです,長いかもしれません";
// フォントサイズを選択します
$font = 3;
$char_width = imagefontwidth($font);
// せいぜい数文字を表示できるかを計算します
$max_chars = floor($image_width / $char_width);
// テキストを切り取ります,画像幅が超えないようにします
if (mb_strlen($text, 'UTF-8') > $max_chars) {
$text = mb_substr($text, 0, $max_chars, 'UTF-8') . '...';
}
// テキスト幅を計算します,センターディスプレイ
$text_length = mb_strlen($text, 'UTF-8');
$text_width = $text_length * $char_width;
$x = ($image_width - $text_width) / 2;
$y = ($image_height - imagefontheight($font)) / 2;
// テキストを描きます
imagestring($image, $font, $x, $y, $text, $text_color);
// 出力画像
header("Content-Type: image/png");
imagepng($image);
imagedestroy($image);
?>
ImageFontWidth($ font)を使用して、単一の文字の幅を取得します。
MB_STRLEN()を組み合わせて、文字列内の文字の数を計算して、テキストの合計幅を取得します。
テキストの幅を画像幅と比較して、それを超えるかどうかを判断します。
テキストを切断するか、状況に応じてフォントサイズを調整して、テキストが画像範囲内にあることを確認します。
この方法は、PHP内蔵フォントを使用してテキストが描画されるシーンに適しています。
TTFフォントを使用してテキストを描画する必要がある場合は、 ImageTtfbbox()を使用してテキストサイズをより正確に測定することをお勧めします。