imagettftext
(PHP 4, PHP 5, PHP 7)
imagettftext — TrueType フォントを使用してテキストを画像に書き込む
説明
imagettftext
( resource $image
, float $size
, float $angle
, int $x
, int $y
, int $color
, string $fontfile
, string $text
) : array
指定した text
を、
TrueType フォントを使用して画像に書き込みます。
注意:
imagefttext() は、 imagettftext() を拡張したものです。
extrainfo
を追加でサポートしています。
パラメータ
image
imagecreatetruecolor() のような画像作成関数が返す画像リソース。
size
ポイント数単位のフォントサイズ。
angle
度で表される角度。0 度は左から右にテキストを読む方向になります。 0 より大きな値は、反時計回りの回転を表現します。例えば、 90 という値は下から上にテキストを読む方向になります。
x
x
とy
で与えられた座標は、最初の文字のベースポイント (ほぼ文字の左下角) を定義します。 この仕様は、x
とy
で最初の文字の右上角を定義する imagestring() と異なっています。 例えば、左上は 0, 0 となります。y
y 座標。これは文字の最下位置ではなく、 フォントペースラインの位置を指定します。
color
カラーインデックス。負の数を使用した場合、 アンチエイリアス機能がオフになります。 imagecolorallocate() を参照ください。
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
には適用され ない ことに注意してください。text
テキスト文字列を UTF-8 エンコーディングで表したもの。
フォント内で 127 文字目以降の文字にアクセスするために、 (€ のような) 十進数文字参照を含めることができます。 (© のような) 十六進形式もサポートしています。 UTF-8 エンコーディングされた文字列を直接渡すことができます。
© のような文字エンティティはサポートされません。 html_entity_decode() を使用して、 文字エンティティを UTF-8 文字列にすることを検討してください。
フォントでサポートされていない文字が文字列で使用されている場合、 その文字は白抜きの矩形に置き換えられます。
返り値
テキストの境界を
構成する 4 点を表す 8 個の要素を有する配列を返します。
返される点は左下、右下、右上、左上の順番となります。
点の座標は、角度によらず text に関する相対座標として表されます。
つまり、"左上"は、text を水平に見た場合の左上の隅を表します。
エラー時には false
を返します。
例
例1 imagettftext() の例
この例は、400x30 ピクセルの白地に Arial フォントを用いて、黒字 (グレーの影付き) で "Testing..." と書かれた PNG を作成します。
<?php// コンテントタイプを設定しますheader('Content-Type: image/png');// 画像を生成します$im = imagecreatetruecolor(400, 30);// いくつかの色を生成します$white = imagecolorallocate($im, 255, 255, 255);$grey = imagecolorallocate($im, 128, 128, 128);$black = imagecolorallocate($im, 0, 0, 0);imagefilledrectangle($im, 0, 0, 399, 29, $white);// 描画する文字列$text = 'Testing...';// フォント自身のパスでパスを置き換えます$font = 'arial.ttf';// テキストに影を付けますimagettftext($im, 20, 0, 11, 21, $grey, $font, $text);// テキストを追加しますimagettftext($im, 20, 0, 10, 20, $black, $font, $text);// imagepng() を使用して imagejpeg() よりもクリアなテキストにしますimagepng($im);imagedestroy($im);?>
上の例の出力は、 たとえば以下のようになります。
注意
注意:
この関数は、PHP が FreeType サポート(--with-freetype-dir=DIR) を有効にしてコンパイルされている場合のみ使用可能です。
参考
- imagettfbbox() - TypeType フォントを使用したテキストの bounding box を生成する
- imagefttext() - FreeType 2 によるフォントを用いてイメージにテキストを描画する