TypeType フォントを使用したテキストの bounding box の生成
array imagettfbbox ( float size, float angle, string fontfile, string text )
この関数は TrueType テキストの bounding box をピクセル単位で計算して返します。
size
ピクセル単位のフォントの大きさ。
angle
測定する text の角度(度単位)。
fontfile
TrueType フォントファイルのファイル名(URL)。PHP が使用している GD ライブラリのバージョンによっては、'/' から始まり '.ttf' で終わるような ファイル名で探し、またライブラリによって定義されているフォントパスで 探そうと試みます。
text
測定する文字列。
imagettfbbox() は、テキストの bounding box を 作成するための 4 点を表現する 8 個の要素からなる配列を返します。
配列のキー | 値の意味 |
---|---|
0 | 左下角の X 座標 |
1 | 左下角の Y 座標 |
2 | 右下角の X 座標 |
3 | 右下角の Y 座標 |
4 | 右上角の X 座標 |
5 | 右上角の Y 座標 |
6 | 左上角の X 座標 |
7 | 左上角の Y 座標 |
4 点の座標は、角度によらず text に関する 相対位置で表わされます。 つまり、”左上”はテキストを水平に見た場合の左上の角を意味します。
図の見方
「斜線」の図は、ベースとなる画像のキャンバスと見立ててください。 0 1 2 3 4 .. X 1┌───┐ 2│//////│ 3│//////│ 4│//////│ :└───┘ Y 座標は左上が(0,0)で、基点となります。 X座標は右方向が正、左方向が負。 Y座標は下方向が正、上方向が負。
「白抜き」の図は bounding box の矩形(長方形)と見立ててください。 ┌───┐ │67 45│ │ │ │01 23│ └───┘ ペアの数字は配列のキーを表し、ペアの左側がX座標、右側がY座標に相当します。
以下に、imagettfbbox 関数で返却された配列の値と bounding box の割り当てを可視化します。
Array ( [0] => 0 [1] => 4 [2] => 4 [3] => 4 [4] => 4 [5] => 0 [6] => 0 [7] => 0 ) 0 1 2 3 4 .... ┌───┬─── X 1│67 45│//// 2│ │//// 3│01 23│//// 4├───┘//// :│//////////// :│//////////// │ Y
Array ( [0] => 2 [1] => 6 [2] => 6 [3] => 6 [4] => 6 [5] => 2 [6] => 2 [7] => 2 ) 0 1 2 3 4 .... ┌──────── X 1│////////////// 2│//┌───┐// 3│//│67 45│// 4│//│ │// :│//│01 23│// :│//└───┘// │////////////// │ Y
Array ( [0] => -1 [1] => 3 [2] => 3 [3] => 3 [4] => 3 [5] => -1 [6] => -1 [7] => -1 ) ┌───┐ │┌──┼──── X ││ │////// ││ │////// └┼──┘////// │//////////// │//////////// │//////////// │ Y
フォントの多くは和文と欧文が混在した場合に欧文の底辺がベースの基準ラインとなるのですが、それをベースラインと呼びます。
下図で示せば Y軸(緑の横線) がベースラインになります。
※. 赤枠は imagettfbbox()関数で取得した バウンディングボックス(bounding box) の座標(4点)を矩形になるように結んだ枠です。
図を見ても解るように、$pos[0] と $pos[2] の値は0ではありません。
感覚としては赤枠の bounding box の左下($pos[0]と$pos[1])の座標が(0, 0)になると思いがちですが、実際は図の通りです。
ピクセル単位で細かく位置指定したい時など、知らないとハマリます(私もハマリました…)