画像処理にPHPを使用する場合、テキストの動的生成は、検証コード、ユーザーアバター、チャートタグなどのシナリオなど、一般的なニーズの1つです。ただし、画像にテキストを適切に整列するには、ピクセルの幅と高さを正確に計算する必要があります。 ImageFtBBox関数は、このタスクを完了するための重要なツールです。この記事では、この関数の使用を詳細に分析し、画像内のテキストのレイアウトを正確に制御するのに役立つ実用的なヒントを提供します。
ImageFtBBoxは、PHPのGDライブラリの関数であり、TrueTypeフォント(TTF)を使用して指定されたテキストをレンダリングするときに境界ボックスを計算します。その返品値は、テキストの境界を含む4つのコーナーの座標を表す配列です。
array imageftbbox ( float $size , float $angle , string $fontfile , string $text [, array $options ] )
$サイズ:フォントサイズ。
$角:テキストの角度(時計回り)。
$ fontfile :フォントファイルパス。
$テキスト:測定するテキスト文字列。
$オプション:単語間隔などのオプションパラメーター。
ImageFtBBoxは、境界ボックスの4つの角の(x、y)座標を表す8つの要素を含む配列を次のように返します。
[
0 => lower left x,
1 => lower left y,
2 => lower right x,
3 => lower right y,
4 => upper right x,
5 => upper right y,
6 => upper left x,
7 => upper left y
]
テキストの「実際の」幅と高さを計算するには、次の式を使用します。
$width = abs($bbox[2] - $bbox[0]);
$height = abs($bbox[5] - $bbox[1]);
以下は、テキストの幅と高さを計算して画像に中央に置く方法を示す完全なPHPの例です。
<?php
// フォントパス(TTF形式)
$font = __DIR__ . '/fonts/arial.ttf';
// テキストコンテンツ
$text = "Hello Gitbox!";
// フォントサイズと角度
$size = 20;
$angle = 0;
// 境界ボックスを計算します
$bbox = imageftbbox($size, $angle, $font, $text);
// 幅と高さを計算します
$width = abs($bbox[2] - $bbox[0]);
$height = abs($bbox[5] - $bbox[1]);
// 画像を作成します
$imageWidth = $width + 20;
$imageHeight = $height + 20;
$image = imagecreatetruecolor($imageWidth, $imageHeight);
// 色を設定します
$white = imagecolorallocate($image, 255, 255, 255);
$black = imagecolorallocate($image, 0, 0, 0);
imagefill($image, 0, 0, $white);
// 開始ポイント座標を計算して描画します,テキストを中央に配置します
$x = ($imageWidth - $width) / 2 - $bbox[0];
$y = ($imageHeight - $height) / 2 - $bbox[5];
// テキストを描きます
imagefttext($image, $size, $angle, $x, $y, $black, $font, $text);
// 出力画像
header("Content-Type: image/png");
imagepng($image);
imagedestroy($image);
?>
上記のコードを.phpファイルとして保存して、たとえばhttps://gitbox.net/demo/text-center.phpの下に展開されるブラウザを介してアクセスできます。テキストが画像に正確に中心になっていることがわかります。
常にABS()を使用してください:Bboxによって返される座標は負である可能性があるため、 ABS()を使用して幅と高さを計算してください。
十分なマージンを残してください:フォントがトリミングされないようにするには、画像サイズにマージンを追加することをお勧めします(上記の例では+20など)。
フォントの互換性に注意:特に、さまざまなオペレーティングシステムまたはコンテナ環境に展開されている場合は、サーバー上のフォントパスが正しいことを確認してください。
マルチラインテキスト処理:各行は、 ImageFtBboxを使用して個別に計算され、マージして配置されます。
ImageFtBBoxは強力ですが、しばしば見落とされがちなツールです。それをマスターすると、画像のタイポグラフィの自由と正確さを大幅に向上させることができます。上記のコンテンツを通して、テキストの幅と高さを正確に計算し、実際のプロジェクトに柔軟に適用できると思います。アダプティブ透かし、ラベル、またはデータアノテーションを画像に追加したい場合は、テキストと画像を真にブレンドするためにさらに練習することもできます。
ImageFtBBoxを詳細に理解することで、画像処理機能は新しいレベルに上昇します。