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

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

(2026年3月15日)PHP8.5対応, pahooInputData.php導入

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

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

サンプル・プログラム

圧縮ファイルの内容
text2image.phpサンプル・プログラム本体
text2image.php 更新履歴
バージョン 更新日 内容
1.3.0 2026/03/15 PHP8.5対応, pahooInputData.php導入
1.2 2022/04/09 PHP8対応,リファラ・チェック改良
1.11 2020/12/26 IPAmj明朝フォントを追加
1.1 2016/01/09 初版
pahooInputData.php 更新履歴
バージョン 更新日 内容
2.0.1 2025/08/11 getParam() bug-fix
2.0.0 2025/08/11 pahooLoadEnv() 追加
1.9.0 2025/07/26 getParam() 引数に$trim追加
1.8.1 2025/03/15 validRegexPattern() debug
1.8.0 2024/11/12 validRegexPattern() 追加

準備:pahooInputData 関数群

PHPのバージョンや入力データのバリデーションなど、汎用的に使う関数群を収めたファイル "pahooInputData.php" が同梱されているが、include_path が通ったディレクトリに配置してほしい。他のプログラムでも "pahooInputData.php" を利用するが、常に最新のファイルを1つ配置すればよい。

また、各種クラウドサービスに登録したときに取得するアカウント情報、アプリケーションパスワードなどを登録した .pahooEnv ファイルから読み込む関数 pahooLoadEnv を備えている。こちらについては、「各種クラウド連携サービス(WebAPI)の登録方法」をご覧いただきたい。

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

text2image.php

 126: /**
 127:  * 文字列を画像に変換
 128:  * @param   int    $mode 0=画面出力,1=画像出力
 129:  * @param   int    $font 0|1(フォントの種類)
 130:  * @param   string $str  文字列(UTF-8)
 131:  * @return  string BASE64
 132: */
 133: function text2image($mode, $font, $str) {
 134:     // フォント・ファイル
 135:     static $table = array(
 136: '../../../../common/font/mikachan-p.ttf',
 137: '../../../../common/font/VL-PGothic-Regular.ttf',
 138: '../../../../common/font/nicokaku_v1.ttf',
 139: '../../../../common/font/ipamp.ttf'
 140: );
 141: 
 142:     if ($str == '')     return '';
 143: 
 144:     $res = '';
 145:     $size = 20;
 146:     $arr = imagettfbbox($size, 0, $table[$font], $str);     // サイズ取得
 147:     $im  = imagecreate($arr[4- $arr[6+ 5, $arr[1- $arr[7+ 5);
 148:                                                     // イメージストリーム作成
 149:     $bgcolor = imagecolorallocate($im, 0xFF, 0xFF, 0xFF);   // 背景色
 150:     imagecolortransparent($im, $bgcolor);                   // 透明化
 151:     $color = imagecolorallocate($im, 0x00, 0x00, 0xCC);     // 文字色
 152:     imagettftext($im, $size, 0, -$arr[6], -$arr[7], $color, $table[$font], $str);   // 出力
 153: 
 154:     if ($mode == 1) {
 155:         header("Content-type: image/png");              // MIMEはPNGで
 156:         imagepng($im);                                  // ブラウザ表示
 157:     } else {
 158:         ob_start();
 159:         imagepng($im);                                  // ブラウザ表示
 160:         $res = base64_encode(ob_get_clean());
 161:     }
 162:     // PHP8.5:非推奨関数
 163:     if (PHP_VERSION_ID < 80500) {
 164:         imagedestroy($im);
 165:     }
 166: 
 167:     return $res;
 168: }

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