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/ に置いている。(サーバ環境によって異なるので、サーバ管理者に確認のこと)

サンプル・プログラム

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

0002: //TrueTypeフォント;環境に合わせて
0003: define('FONTFILE', '../../../../common/font/mikachan-p.ttf');
0004: 
0005: $canvas  = imagecreate(300, 60);                     //イメージストリーム作成
0006: $bgcolor = imagecolorallocate($canvas, 0xFF, 0xFF, 0xCC);    // 背景色
0007: $color   = imagecolorallocate($canvas, 0x00, 0x00, 0xCC);    // 文字色
0008: 
0009: //描画文字列はUTF-8にエンコードしておくこと
0010: $str = 'ようこそぱふぅ家へ!';                  //描画文字列
0011: $str = mb_convert_encoding($str, 'UTF-8', 'auto');
0012: 
0013: imagettftext($canvas, 20, 0, 20, 40, $color, FONTFILE, $str);    //出力
0014: 
0015: header('Content-type: image/png');               //MIMEはPNGで
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