ターゲット端末に必要なフォントがインストールされていない場合などに使える。
<?phpif (isset($_REQUEST['c1']) && isset($_REQUEST['c2']) && isset($_REQUEST['c3'])) { eval("\$c1 = 0x{$_REQUEST['c1']};"); eval("\$c2 = 0x{$_REQUEST['c2']};"); eval("\$c3 = 0x{$_REQUEST['c3']};"); $char = sprintf('%c%c%c', $c1, $c2, $c3); $font = './font1.ttf'; // TTF フォントファイルを指定する $font_size = 20; // フォントサイズ $bbox = imagettfbbox($font_size, 0, $font, $char); $dh = $bbox[1]; $x = $bbox[0]; $w = abs($bbox[4] - $bbox[0]); $h = abs($bbox[5] - $bbox[1]); $im = imagecreate($w, $h); $black = imagecolorallocate($im, 0, 0, 0); $white = imagecolorallocate($im, 255, 255, 255); imagefilledrectangle($im, 0, 0, 299, 299, $white); imagettftext($im, $font_size, 0, -$x-1, $h-$dh-1, $black, $font, $char); header('Content-type: image/png'); imagepng($im); imagedestroy($im); exit;} else { header('Content-Type: text/html');?><html> <head> <title>文字を画像で出力</title> </head> <body> <form method="test.php" name="form1" mthod="get"> <div>UTF-8 コード: <input type="text" name="c1" value="" size="2" /> <input type="text" name="c2" value="" size="2" /> <input type="text" name="c3" value="" size="2" /><br /> <input type="submit" value="変換" /></div> </form> </body></html><?php exit;}?>$font 変数に、True Type フォントのファイル名を、$font_size 変数に表示するフォントのサイズを指定し、test.php というファイル名でしかるべき場所に保存する。何もパラメータを指定せずに実行すると入力欄が3つ表示されるので、そこに1バイト分ずつ UTF-8 での文字コードを入力する。
たとえば、「石」であれば
e7、9f、b3 とする。[変換] ボタンをクリックすれば、指定した文字が画像として表示される。
なお、いつものことながら上のコードサンプルではセキュリティ上の配慮はしていない。
imagettfbbox() は、指定したフォントサイズ、角度 (この場合は0°)、フォント、文字列 (この場合は1文字だけ) で bounding box を作成してその四隅の座標を配列で返す関数。
その座標情報をもとに画像サイズ (imagecreate() 関数) と文字の位置 (imagettftext() 関数) を決めている。
imagettftext() 関数で 4 つめと 5 つめの引数で
-$x-1、$h-$dh-1 のように 1 を引いているが、これはフォントによって調整が必要かもしれない。
