(PHP 4, PHP 5, PHP 7, PHP 8)
imagettfbbox — TypeType フォントを使用したテキストの bounding box を生成する
$size
,$angle
,$font_filename
,$string
,$options
= []この関数は TrueType テキストの bounding box をピクセル単位で計算して 返します。
注意:
PHP 8.0.0 より前のバージョンでは、 imageftbbox() は、 imagettfbbox() を拡張したものでした。
extrainfo
を追加でサポートしています。 PHP 8.0.0 以降では、 imagettfbbox() は、 imageftbbox() のエイリアスになっています。
size
ポイント数単位のフォントサイズ。
angle
測定する string
の角度(度単位)。
fontfile
使用したい TrueType フォントへのパス。
どの GDライブラリをPHPが使っているかによって、
いつ
fontfile
パラメータの先頭が
/
で始まらず、
.ttf
がファイル名に付加されるかが違います。
そして、ライブラリは自らが定義したフォントパスに従ってそのファイル名を探そうとします。
GD ライブラリ 2.0.18 より前のバージョンを使っている場合、
セミコロンではなく、space
文字が 異なるフォントファイルの
'pathのセパレータ' として使われていました。
この機能を意図せず使ってしまうと、次のような警告が発生します:
Warning: Could not find/open font
.
この事象の影響を受けてしまうバージョンでは、
唯一の解決策はフォントをスペースを含まないパスに移動させることだけです。
多くの場合、スクリプトが使っているフォントと同じディレクトリにある場合、 次のようなテクニックで問題を軽減できるでしょう。
<?php
// GD の環境変数を設定
putenv('GDFONTPATH=' . realpath('.'));
// 使用されるフォント名 ( .ttf 拡張子の欠落に注意)
$font = 'SomeFont';
?>
注意:
open_basedir は
fontfile
には適用され ない ことに注意してください。
string
測定する文字列。
imagettfbbox() は、テキストの bounding box を
作成するための 4 点を表現する 8 個の要素からなる配列を返します。
エラー時には false
を返します。
キー | 内容 |
---|---|
0 | 左下角の X 座標 |
1 | 左下角の Y 座標 |
2 | 右下角の X 座標 |
3 | 右下角の Y 座標 |
4 | 右上角の X 座標 |
5 | 右上角の Y 座標 |
6 | 左上角の X 座標 |
7 | 左上角の Y 座標 |
各点の位置は、
angle
にかかわらず
text からの相対位置で表されます。
つまり、"左上"はテキストを水平に見た場合の左上の角を意味します。
バージョン | 説明 |
---|---|
8.0.0 |
options が追加されました。
|
例1 imagettfbbox() の例
<?php
// 300x150 の画像を作成します
$im = imagecreatetruecolor(300, 150);
$black = imagecolorallocate($im, 0, 0, 0);
$white = imagecolorallocate($im, 255, 255, 255);
// 背景を白に設定します
imagefilledrectangle($im, 0, 0, 299, 299, $white);
// フォントファイルへのパス
$font = './arial.ttf';
// まず最初のテキスト用のバウンディングボックスを作成します
$bbox = imagettfbbox(10, 45, $font, 'Powered by PHP ' . phpversion());
// X 座標と Y 座標
$x = $bbox[0] + (imagesx($im) / 2) - ($bbox[4] / 2) - 25;
$y = $bbox[1] + (imagesy($im) / 2) - ($bbox[5] / 2) - 5;
// 書き込みます
imagettftext($im, 10, 45, $x, $y, $black, $font, 'Powered by PHP ' . phpversion());
// 次に 2 番目のテキスト用のバウンディングボックスを作成します
$bbox = imagettfbbox(10, 45, $font, 'and Zend Engine ' . zend_version());
// 最初のテキストに続ける座標を設定します
$x = $bbox[0] + (imagesx($im) / 2) - ($bbox[4] / 2) + 10;
$y = $bbox[1] + (imagesy($im) / 2) - ($bbox[5] / 2) - 5;
// 書き込みます
imagettftext($im, 10, 45, $x, $y, $black, $font, 'and Zend Engine ' . zend_version());
// ブラウザに出力します
header('Content-Type: image/png');
imagepng($im);
imagedestroy($im);
?>
注意: この関数は、PHP が FreeType サポート (--with-freetype-dir=DIR) を有効にしてコンパイルされている場合のみ使用可能です。