imagettftext

(PHP 4, PHP 5, PHP 7)

imagettftextTrueType フォントを使用してテキストを画像に書き込む

説明

imagettftext ( resource $image , float $size , float $angle , int $x , int $y , int $color , string $fontfile , string $text ) : array

指定した text を、 TrueType フォントを使用して画像に書き込みます。

注意:

imagefttext() is an extended variant of imagettftext() which additionally supports the extrainfo.

パラメータ

image

imagecreatetruecolor() のような画像作成関数が返す画像リソース。

size

ポイント数単位のフォントサイズ。

angle

度で表される角度。0 度は左から右にテキストを読む方向になります。 0 より大きな値は、反時計回りの回転を表現します。例えば、 90 という値は下から上にテキストを読む方向になります。

x

xy で与えられた座標は、最初の文字のベースポイント (ほぼ文字の左下角) を定義します。 この仕様は、xy で最初の文字の右上角を定義する imagestring() と異なっています。 例えば、左上は 0, 0 となります。

y

y 座標。これは文字の最下位置ではなく、 フォントペースラインの位置を指定します。

color

カラーインデックス。負の数を使用した場合、 アンチエイリアス機能がオフになります。 imagecolorallocate() を参照ください。

fontfile

使用したい TrueType フォントへのパス。

Depending on which version of the GD library PHP is using, when fontfile does not begin with a leading / then .ttf will be appended to the filename and the library will attempt to search for that filename along a library-defined font path.

When using versions of the GD library lower than 2.0.18, a space character, rather than a semicolon, was used as the 'path separator' for different font files. Unintentional use of this feature will result in the warning message: Warning: Could not find/open font. For these affected versions, the only solution is moving the font to a path which does not contain spaces.

In many cases where a font resides in the same directory as the script using it the following trick will alleviate any include problems.

<?php
// GD の環境変数を設定
putenv('GDFONTPATH=' realpath('.'));

// 使用されるフォント名 ( .ttf 拡張子の欠落に注意)
$font 'SomeFont';
?>

注意:

Note that open_basedir does not apply to fontfile.

text

テキスト文字列を UTF-8 エンコーディングで表したもの。

フォント内で 127 文字目以降の文字にアクセスするために、 (&#8364; のような) 十進数文字参照を含めることができます。 (&#xA9; のような) 十六進形式もサポートしています。 UTF-8 エンコーディングされた文字列を直接渡すことができます。

&copy; のような文字エンティティはサポートされません。 html_entity_decode() を使用して、 文字エンティティを UTF-8 文字列にすることを検討してください。

フォントでサポートされていない文字が文字列で使用されている場合、 その文字は白抜きの矩形に置き換えられます。

返り値

テキストの境界を 構成する 4 点を表す 8 個の要素を有する配列を返します。 返される点は左下、右下、右上、左上の順番となります。 点の座標は、角度によらず text に関する相対座標として表されます。 つまり、"左上"は、text を水平に見た場合の左上の隅を表します。 エラー時には FALSE を返します。

変更履歴

バージョン 説明
5.2.0 text で十六進形式のエンティティを指定できるようになりました。

例1 imagettftext() の例

この例は、400x30 ピクセルの白地に Arial フォントを用いて、黒字 (グレーの影付き) で "Testing..." と書かれた PNG を作成します。

<?php
// コンテントタイプを設定します
header('Content-Type: image/png');

// 画像を生成します
$im imagecreatetruecolor(40030);

// いくつかの色を生成します
$white imagecolorallocate($im255255255);
$grey imagecolorallocate($im128128128);
$black imagecolorallocate($im000);
imagefilledrectangle($im0039929$white);

// 描画する文字列
$text 'Testing...';
// フォント自身のパスでパスを置き換えます
$font 'arial.ttf';

// テキストに影を付けます
imagettftext($im2001121$grey$font$text);

// テキストを追加します
imagettftext($im2001020$black$font$text);

// imagepng() を使用して imagejpeg() よりもクリアなテキストにします
imagepng($im);
imagedestroy($im);
?>

上の例の出力は、 たとえば以下のようになります。

出力例 : imagettftext()

注意

注意: この関数は、PHP が FreeType サポート (--with-freetype-dir=DIR ) を有効にしてコンパイルされている場合のみ使用可能です。

参考

  • imagettfbbox() - TypeType フォントを使用したテキストの bounding box を生成する
  • imagefttext() - FreeType 2 によるフォントを用いてイメージにテキストを描画する