PHPでは、画像処理にGDライブラリを使用することは一般的な操作です。画像上に背景色のテキストブロックを描画する場合、2つの関数ImageFontWidth()とImageFilledRectangle()が非常に便利です。この記事では、これら2つの機能を通じて背景テキストブロック効果を達成する方法を詳細に紹介します。
ImageFontWidth(int $ font):int
この関数は、指定された内蔵フォントの文字幅を返します。ここでは、 $ fontは、 GDライブラリの組み込みフォントサイズ(通常1〜5)を表す整数です。フォントの幅がわかったら、テキストブロックの幅を計算できます。
ImageFilledRectangle(Resource $ Image、int $ x1、int $ y1、int $ x2、int $ y2、int $ color):bool
この関数は、画像$画像に充填された長方形を描き、左上隅( $ x1 、 $ y1 )と右下隅( $ x2 、 $ y2 )に座標があり、塗りつぶしは$色です。
これらの2つの関数を組み合わせることで、最初にテキストの長さとフォント幅に基づいて背景長方形のサイズを計算し、長方形を描画し、最後にテキストを描画し、背景のあるテキストブロックを形成します。
<?php
// 空白のキャンバスを作成します
$width = 300;
$height = 100;
$image = imagecreatetruecolor($width, $height);
// 色を設定します
$bgColor = imagecolorallocate($image, 255, 255, 255); // 白い背景
$textColor = imagecolorallocate($image, 0, 0, 0); // 黒いテキスト
$rectColor = imagecolorallocate($image, 200, 200, 200); // 灰色の背景ブロック
// キャンバスの背景色を埋めます
imagefill($image, 0, 0, $bgColor);
// テキストとフォント
$text = "PHP 背景のあるテキストブロックの例";
$font = 5; // GD 内蔵フォントサイズ,範囲 1~5
// テキストの幅と高さを計算します
$fontWidth = imagefontwidth($font);
$fontHeight = imagefontheight($font);
$textWidth = $fontWidth * strlen($text);
$textHeight = $fontHeight;
// 背景長方形座標(マージンを残します)
$padding = 5;
$x1 = 50;
$y1 = 30;
$x2 = $x1 + $textWidth + 2 * $padding;
$y2 = $y1 + $textHeight + 2 * $padding;
// 背景として塗りつぶしの長方形を描きます
imagefilledrectangle($image, $x1, $y1, $x2, $y2, $rectColor);
// 背景にテキストを描画します(オフセットに注意してくださいpadding)
imagestring($image, $font, $x1 + $padding, $y1 + $padding, $text, $textColor);
// 出力画像
header('Content-Type: image/png');
imagepng($image);
// 無料のリソース
imagedestroy($image);
?>
ImageFontWidth($ font)とImageFontheight($ font)を使用して、フォントの単一文字の幅と高さを取得します。
文字列の長さに基づいて、テキスト全体の幅を計算します。
背景の長方形がテキストに固執しないように、適切なマージン$パディングを設定します。
ImageFilledRectangle()で背景長方形を描画します。
次に、 ImageString()を使用して、背景長方形にテキストを描画して、テキストに内側のマージンがあることを確認します。
$ rectcolorの色値を調整することにより、背景ブロックの色を変更できます。
他のGD関数と組み合わせて、丸みを帯びた長方形、影など、より多くの効果を実現できます。
より複雑なフォントスタイルをサポートする必要がある場合は、 imagettftext()を使用して、フォントファイルでより柔軟なテキストレンダリングを実現できます。