PHPでは、画像テキストのタイプセットを扱う場合、複数のテキストアライメントの問題に遭遇することがよくあります。 GDライブラリでImageFontWidth()関数を使用すると、指定されたフォントの文字幅を簡単に取得でき、より正確なテキストレイアウトとアライメントを実現できます。この記事では、ImageFontWidth()関数を使用して、テキストの複数の行の幅を自動的に計算して、テキストのきちんとしたレイアウトを支援する方法を詳細に紹介します。
ImageFontWidth()は、GDライブラリが提供する関数で、各文字の幅を指定された内蔵フォント、ピクセルで取得します。関数プロトタイプは次のとおりです。
int imagefontwidth(int $font);
パラメーター$フォントはフォントサイズで、通常はGDに組み込まれた5つのフォントサイズに対応する値範囲は1〜5です。
関数は、フォント内の各文字の幅を返します。
この関数を通じて、テキスト内の各文字が占めるピクセル数を知ることができ、それにより、文字列の長さに基づいてテキスト全体の幅を計算できます。
画像に複数のテキストを描画し、各行の幅を中心にしているか、左調整したいとします。多くの場合、複数の行の長さは異なり、文字列の幅を直接計算して描画します。これは、特にMonospaceフォントを使用する場合、不均一なレイアウトにつながる可能性があります。
解決策は、最初にImageFontWidth()を使用して単一の文字の幅を計算し、文字列の長さに基づいて各行の幅を計算して、テキストの開始点座標を決定し、自動アライメントを実現することです。
次の例コードは、PHPのGDライブラリをImageFontWidth()と組み合わせて使用する方法を示しています。
<?php
// 空白の画像を作成します
$width = 400;
$height = 200;
$image = imagecreatetruecolor($width, $height);
// 背景の色とテキストの色を設定します
$bgColor = imagecolorallocate($image, 255, 255, 255); // 白い背景
$textColor = imagecolorallocate($image, 0, 0, 0); // 黒いテキスト
// 背景を埋めます
imagefilledrectangle($image, 0, 0, $width, $height, $bgColor);
// 描画する複数のテキスト行
$textLines = [
"これがテキストの最初の行です",
"テキストの2行目はもう少し長いです",
"3行目"
];
// フォントサイズを選択します
$font = 5; // GD内蔵フォント,1-5間
// フォントの幅と高さを計算します
$fontWidth = imagefontwidth($font);
$fontHeight = imagefontheight($font);
// 初期描画開始点Y座標
$startY = 20;
// テキストの各行を繰り返します,幅を計算し、中央に描画します
foreach ($textLines as $line) {
$lineLength = strlen($line); // 知らせ:ここで使用しますstrlen純粋な英語に適しています,中国語がある場合は使用してくださいmb_strlenキャラクターエンコーディングがあることを確認してください
$lineWidth = $fontWidth * $lineLength;
// 計算しますX座標,センターを調整します
$x = ($width - $lineWidth) / 2;
// テキストを描きます
imagestring($image, $font, $x, $startY, $line, $textColor);
// 次の行Y座標
$startY += $fontHeight + 10; // ライン間隔10ピクセル
}
// 出力画像
header("Content-Type: image/png");
imagepng($image);
imagedestroy($image);
?>
ImageFontWidth()およびstrlen()で現在の行のテキスト幅を計算します。
画像幅を使用してテキスト幅を差し引き、それを2で除算して、中心になったらx座標を計算します。
複数のテキストを順番に描画し、Y座標を調整して、ライン破壊効果を達成します。
中国の文字列幅の計算に注意してください。 strlen()は、バイト数をカウントし、計算エラーにつながる可能性があります。 MB_STRLEN()と適切な文字エンコードを組み合わせることをお勧めします。
ImageFontWidth()は単一の文字の幅を取得できますが、漢字は通常マルチバイトです。精度を確保するために、 mb_strlen()を使用することをお勧めします。
$lineLength = mb_strlen($line, 'UTF-8');
PHPファイルとオペレーティング環境がUTF-8エンコーディングをサポートしていることを確認します。
ImageFontWidth()関数は、PHP GDライブラリのシンプルだが非常に実用的なツールです。開発者は、マルチラインのテキスト幅を自動的に計算し、より合理的なテキストレイアウトとアラインメントを実現するのに役立ちます。文字列の長さを組み合わせてテキストの各行で占められているピクセル幅を計算することにより、センタリングまたはその他のアライメントを入力しやすく、画像ワードプロセッシングの複雑さを大幅に簡素化できます。