PHPでTrueTypeフォントを利用する(その2)

(1/1)
PHP で TrueType フォントを利用する」では、TrueType フォントを使ってテキストを画像表示するプログラムをつくった。
今回は、HTML コンテンツの中に画像データを埋め込む方法について解説する。この方法を使うことで、1 つの PHP プログラムで、テキストと画像を混在するコンテンツを表示することができるようになる。

サンプル・プログラムの実行例

PHPでTrueTypeフォントを利用する(その2)

サンプル・プログラム

解説:画像をHTMLコンテンツに埋め込む

0139: /**
0140:  * 文字列を画像に変換
0141:  * @param int    $mode 0=画面出力,1=画像出力
0142:  * @param int    $font 0|1(フォントの種類)
0143:  * @param string $str  ASCII文字列(UTF-8)
0144:  * @return string BASE64
0145: */
0146: function text2image($mode$font$str) {
0147:     //フォント・ファイル
0148:     static $table = array(
0149: '../../../../common/font/mikachan-p.ttf',
0150: '../../../../common/font/VL-PGothic-Regular.ttf',
0151: '../../../../common/font/nicokaku_v1.ttf'
0152: );
0153: 
0154:     if ($str == '')    return '';
0155: 
0156:     $res = '';
0157:     $size = 20;
0158:     $arr = imagettfbbox($size, 0, $table[$font]$str);  //サイズ取得
0159:     $im  = imagecreate($arr[4] - $arr[6] + 5, $arr[1] - $arr[7] + 5);
0160:                                                     //イメージストリーム作成
0161:     $bgcolor = imagecolorallocate($im, 0xFF, 0xFF, 0xFF);    // 背景色
0162:     imagecolortransparent($im$bgcolor);                    //透明化
0163:     $color = imagecolorallocate($im, 0x00, 0x00, 0xCC);  // 文字色
0164:     imagettftext($im$size, 0, -$arr[6], -$arr[7]$color$table[$font]$str);  //出力
0165: 
0166:     if ($mode == 1) {
0167:         header("Content-type: image/png");               //MIMEはPNGで
0168:         imagepng($im);                                   //ブラウザ表示
0169:     } else {
0170:         ob_start();
0171:         imagepng($im);                                   //ブラウザ表示
0172:         $res = base64_encode(ob_get_clean());
0173:     }
0174:     imagedestroy($im);                                   //後処理
0175: 
0176:     return $res;
0177: }

ユーザー関数 text2image は、引数 $mode が 1 の時は、「PHP で TrueType フォントを利用する」と同様に画像として出力する。引数 $mode が 0 の時は、img タグの中に画像データを埋め込む。今回は 0 の場合のみ利用している。

img タグの中に画像データを埋め込むには、src 属性の中に "data:image/png;base64," の後に BASE64 エンコードされた画像データを並べれば良い。
そこで、組み込み関数  ob_start  と imagepng  を用い出力した画像データを、 ob_get_clean  によって取得する。これを  base64_encode  に渡してやり、src 属性の中に並べる。

参考サイト

(この項おわり)
header