サンプル・プログラムの実行例
サンプル・プログラム
たとえば Apache + PHP の環境であれば、
<!--#include virtual="ascii2image.php?s=hogehoge.pahoo.org" -->のように記述することで、Webページに画像化したテキストを埋め込んでくれる。
ascii2image.php | サンプル・プログラム本体。 |
pahooInputData.php | データ入力に関わる関数群。 使い方は「PHPでGET/POSTでフォームから値を受け取る」「数値入力とバリデーション」「文字入力とバリデーション」などを参照。include_path が通ったディレクトリに配置すること。 |
準備
46: //表示幅(ピクセル)
47: define('WIDTH', 600);
48:
49: //テキスト(初期値)
50: define('DEF_TEXT', 'hoge@pahoo.org');
51:
52: //テキスト(最小長)
53: define('MIN_LEN_TEXT', 1);
54:
55: //テキスト(最小長)
56: define('MAX_LEN_TEXT', 30);
57:
58: //テキスト(許容パターン)
59: define('PAT_TEXT', '/^[\x20-\x7E]+$/');
60:
61: //フォント・ファイルの名称、配置位置
62: $FontTable = array(
63: array('VLゴシック', '../../../../common/font/VL-PGothic-Regular.ttf'),
64: array('Throw My Hands Up in the Air', '../../../../common/font/ThrowMyHandsUpintheAir.ttf'),
65: );
66:
67: /**
今回は、描画用フォントとして「VLゴシックフォントファミリ」と「Throw My Hands Up in the Air」の2種類を選択できるようにした。後者は手書き風フォントであり、OCRによる解析を回避する役に立つだろう。
使用するフォントを変更したり増やしたいときは、配列変数 $FontTable を編集して欲しい。
その他、入力バリデーションに必要なパラメータを定数で用意している。これらも自由に変更できる。
解説:ASCII文字を画像に変換
126: /**
127: * ASCII文字を画像に変換
128: * @param int $mode 0=画面出力,1=画像出力
129: * @param int $font 0|1(フォントの種類)
130: * @param string $str ASCII文字列(UTF-8)
131: * @return string BASE64
132: */
133: function ascii2image($mode, $font, $str) {
134: global $FontTable;
135:
136: if ($str == '') return '';
137:
138: $res = '';
139: $size = 20;
140: $arr = imagettfbbox($size, 0, $FontTable[$font][1], $str); //サイズ取得
141: $im = imagecreate($arr[4] - $arr[6] + 5, $arr[1] - $arr[7] + 5);
142: //イメージストリーム作成
143: $bgcolor = imagecolorallocate($im, 0xFF, 0xFF, 0xFF); // 背景色
144: imagecolortransparent($im, $bgcolor); //透明化
145: $color = imagecolorallocate($im, 0x00, 0x00, 0xCC); // 文字色
146: imagettftext($im, $size, 0, -$arr[6], -$arr[7], $color, $FontTable[$font][1], $str); //出力
147:
148: if ($mode == 1) {
149: header("Content-type: image/png"); //MIMEはPNGで
150: imagepng($im); //ブラウザ表示
151: } else {
152: ob_start();
153: imagepng($im); //ブラウザ表示
154: $res = base64_encode(ob_get_clean());
155: }
156: imagedestroy($im); //後処理
157:
158: return $res;
159: }
参考サイト
- PHPでTrueTypeフォントを利用する:ぱふぅ家のホームページ
- GD関数:PHP公式
そうした被害を避けるため、メールアドレスを画像化しておこう。正規ユーザーには迷惑をかけるが、自己防衛のためにやむを得ないことである。
(2022年6月27日)FastCGIで正常動作しない不具合を修正
(2022年5月22日)pahooInputData.php分離,PHP8対応