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

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

(2022年4月9日)PHP8対応,リファラ・チェック改良

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

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

サンプル・プログラム

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

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

0173: /**
0174:  * 文字列を画像に変換
0175:  * @param   int    $mode 0=画面出力,1=画像出力
0176:  * @param   int    $font 0|1(フォントの種類)
0177:  * @param   string $str  文字列(UTF-8)
0178:  * @return  string BASE64
0179: */
0180: function text2image($mode$font$str) {
0181:     //フォント・ファイル
0182:     static $table = array(
0183: '../../../../common/font/mikachan-p.ttf',
0184: '../../../../common/font/VL-PGothic-Regular.ttf',
0185: '../../../../common/font/nicokaku_v1.ttf',
0186: '../../../../common/font/ipamp.ttf'
0187: );
0188: 
0189:     if ($str == '')        return '';
0190: 
0191:     $res = '';
0192:     $size = 20;
0193:     $arr = imagettfbbox($size, 0, $table[$font]$str);      //サイズ取得
0194:     $im  = imagecreate($arr[4] - $arr[6] + 5, $arr[1] - $arr[7] + 5);
0195:                                                     //イメージストリーム作成
0196:     $bgcolor = imagecolorallocate($im0xFF0xFF0xFF);    //背景色
0197:     imagecolortransparent($im$bgcolor);                    //透明化
0198:     $color = imagecolorallocate($im0x000x000xCC);      //文字色
0199:     imagettftext($im$size, 0, -$arr[6], -$arr[7]$color$table[$font]$str);  //出力
0200: 
0201:     if ($mode == 1) {
0202:         header("Content-type: image/png");              //MIMEPNG
0203:         imagepng($im);                                   //ブラウザ表示
0204:     } else {
0205:         ob_start();
0206:         imagepng($im);                                   //ブラウザ表示
0207:         $res = base64_encode(ob_get_clean());
0208:     }
0209:     imagedestroy($im);                                   //後処理
0210: 
0211:     return $res;
0212: }

ユーザー関数 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