人気ブログランキングへ

2009年11月08日

文字を画像として出力する (PHP)

文字を画像にして出力するPHPスクリプトを作ってみた。

ターゲット端末に必要なフォントがインストールされていない場合などに使える。

<?php
if (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" />&nbsp;
<input type="text" name="c2" value="" size="2" />&nbsp;
<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 での文字コードを入力する。
たとえば、「石」であれば e79fb3 とする。
[変換] ボタンをクリックすれば、指定した文字が画像として表示される。

なお、いつものことながら上のコードサンプルではセキュリティ上の配慮はしていない。

imagettfbbox() は、指定したフォントサイズ、角度 (この場合は0°)、フォント、文字列 (この場合は1文字だけ) で bounding box を作成してその四隅の座標を配列で返す関数。
その座標情報をもとに画像サイズ (imagecreate() 関数) と文字の位置 (imagettftext() 関数) を決めている。

imagettftext() 関数で 4 つめと 5 つめの引数で -$x-1$h-$dh-1 のように 1 を引いているが、これはフォントによって調整が必要かもしれない。
posted by K/I at 11:22 | 東京 ☀ | Comment(0) | TrackBack(0) | 技術メモ | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

※ブログオーナーが承認したコメントのみ表示されます。

この記事へのトラックバック