TrueType Fontで文字列を記述した場合の大きさを測る
GDを使ってイメージに文字列を表示するにはImageTTFTextを利用します。 このとき、あらかじめ出力後の大きさがわかると非常に便利です。 ImageTTFBBoxを使うと、出力時の幅や高さ(bounding box)がわかります。
以下、ImageTTFBBoxのAPIです。
array
ImageTTFBBox( float $size,
float $angle, string $fontfile, string $text )
ImageTTFBoxが返すarrayには4点を表す8個の要素が含まれています。 以下、arrayの内容です。
- 0 : 左下角の X 座標
- 1 : 左下角の Y 座標
- 2 : 右下角の X 座標
- 3 : 右下角の Y 座標
- 4 : 右上角の X 座標
- 5 : 右上角の Y 座標
- 6 : 左上角の X 座標
- 7 : 左上角の Y 座標
サンプルコード
以下のサンプルでは、文字列に必要な大きさを取得してから、それに応じた大きさのリソースをImageCreateで生成しています。
利用しているフォントは、フリーの日本語フォントであるIPAフォント(Pゴシック)です。 「/path-to-fontfile/」の部分を必要に応じて変更して下さい。
<?php
$text = 'hogehoge';
// 大きさを測定
$result = ImageTTFBBox(24, 0, '/path-to-fontfile/ipagp.ttf', $text);
// 左上
$x0 = $result[6];
$y0 = $result[7];
// 右下
$x1 = $result[2];
$y1 = $result[3];
// 幅と高さを取得
$width = $x1 - $x0;
$height = $y1 - $y0;
// イメージリソースを生成
$img = ImageCreate($width, $height);
// 黒と白を生成
$black = ImageColorAllocate($img, 0x00, 0x00, 0x00);
$white = ImageColorAllocate($img, 0xff, 0xff, 0xff);
// 背景を黒く塗りつぶす
ImageFilledRectangle($img, 0,0, $width,$height, $black);
// 白い文字を描く
ImageTTFText($img, 24, 0, 0, 24, $white,
'/path-to-fontfile/ipagp.ttf', $text);
// PNGとして出力
header('Content-Type: image/png');
ImagePNG($img);
?>
動作例
<img src="script/text3.php">