PHPでTrueTypeフォントを利用する

(1/1)
HTMLの画面に装飾を施すには限界がある。
日本語環境の場合、さまざまなフォントが利用できるにもかかわらず、利用できるフォントはクライアント(ブラウザ)に依存してしまう。
そこで今回は、GDライブラリTrueTypeフォントを描画できることを利用して、フリーの日本語フォントを描画させる方法を紹介する。

目次

みかちゃんFONTの入手

サンプル・プログラムの描画に利用しているのは、フリーのTrueTypeフォントとして有名な「みかちゃん」である。まず、このフォントを入手しよう。
みかちゃん」にアクセスし、メニュー「だうんろーど」から、使用OSを選んでダウンロードする。GDライブラリではフォント・コレクションは利用できないようなので、Windowsユーザーは、4種類あるフォントを別々にダウンロードすること。
なお、WindowsコーナーにあるLZH形式ファイルをダウンロードすれば、LinuxやOS Xのサーバ環境でも利用できる。
ここでは、「みかちゃん-P.ttf」を利用する。サーバ環境で使用する便宜上、ファイル名を"mikachan-p.ttf"と変更しておこう。

FONTのインストール先

みかちゃん」をWindows XPで利用するなら、FONTディレクトリ"C:\WINDOWS\Fonts"にコピーすればよい。
が、ここでは、Webサーバ環境で利用するので、Apacheが支配しているディレクトリにコピーした方が都合がよい。ここでは /public_html/font/ に置いている。(サーバ環境によって異なるので、サーバ管理者に確認のこと)

サンプル・プログラム

圧縮ファイルの内容
imagettftext.phpサンプル・プログラム本体

サンプル・プログラムの解説

0002: //TrueTypeフォント;環境に合わせて
0003: define('FONTFILE', '../../../../common/font/mikachan-p.ttf');
0004: 
0005: $canvas  = imagecreate(300, 60);                     //イメージストリーム作成
0006: $bgcolor = imagecolorallocate($canvas0xFF0xFF0xCC);    // 背景色
0007: $color   = imagecolorallocate($canvas0x000x000xCC);    // 文字色
0008: 
0009: //描画文字列はUTF-8にエンコードしておくこと
0010: $str = 'ようこそぱふぅ家へ!';                    //描画文字列
0011: $str = mb_convert_encoding($str, 'UTF-8', 'auto');
0012: 
0013: imagettftext($canvas, 20, 0, 20, 40, $colorFONTFILE$str);    //出力
0014: 
0015: header('Content-type: image/png');              //MIMEPNG
0016: imagepng($canvas);                               //ブラウザ表示
0017: imagedestroy($canvas);                           //後処理

まず、みかちゃん-P.ttf を配置した場所を定数 FONTFILE にセットしておく。

そのあとに GD関数が登場する。
 imagecreate は、GDライブラリの最初に呼び出す関数で、横xピクセル、縦yピクセルのGDイメージストリームを作成し、そのストリームへのイメージストリーム番号を返す。以後、このイメージストリーム番号に対して画像処理を行うことになる。

 imagecolorallocate は、イメージストリーム番号imageに対して、red, green, blue(各8ビット)で与えられたカラーから成る色番号を返す。失敗すると(-1)を返す。以後、イメージストリーム番号imageに対するカラー処理は、この色番号を用いて行う。なお、最初にimagecolorallocate関数を呼び出した時の値は、暗黙のうちにイメージストリームの背景色となる。
次に文字色の色番号を設定している。

組み込み関数  mb_convert_encoding  を用い、変数 $str のコードを自動で UTF-8 に変換する。これは、次の関数  imagettftext  がUTF-8を入力パラメータとする仕様のためだ。
GD関数  imagettftext  は、イメージストリーム番号imageに対し、大きさsizeピクセルの文字列textをTrueTypeフォントfontfileによって角度angleで位置x,yピクセルから描く。textはUTF-8であること。座標系は左上角を(0, 0)とする。

GD関数  imagepng  は、イメージストリーム番号imageの内容を標準出力(クライアント)へPNG画像として送信する。

GD関数  imagedestroy  は、イメージストリーム番号imageのメモリを解放する。PHPはプログラムが終わると自動的にメモリ解放処理を行うが、imagecreateに対する後処理として明記するのがよい。
(この項おわり)
header