Contents
- UNIX
- Windows
- サーバ
- プログラミング言語
- データベース
- プロトコル
- サービス
- オープンソース
- 規格・技術
- アプリケーション
- PC
- DEVICE
- その他(未分類)
お問合せ:
メールフォーム
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)になると思いがちですが、実際は図の通りです。
ピクセル単位で細かく位置指定したい時など、知らないとハマリます(私もハマリました…)