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">



プロフェッショナルIPv6解説動画シリーズ再生リスト

動画で学ぶ「プロフェッショナルIPv6」を作っています。 もしよろしければご覧ください。お楽しみいただければ幸いです!