サンプル・プログラムの実行例
サンプル・プログラム
たとえば Apache + PHP の環境であれば、
<!--#include virtual="ascii2image.php?s=hogehoge.pahoo.org" -->のように記述することで、Webページに画像化したテキストを埋め込んでくれる。
ascii2image.php | サンプル・プログラム本体。 |
pahooInputData.php | データ入力に関わる関数群。 使い方は「PHPでGET/POSTでフォームから値を受け取る」「数値入力とバリデーション」「文字入力とバリデーション」などを参照。include_path が通ったディレクトリに配置すること。 |
準備
0046: //表示幅(ピクセル)
0047: define('WIDTH', 600);
0048:
0049: //テキスト(初期値)
0050: define('DEF_TEXT', 'hoge@pahoo.org');
0051:
0052: //テキスト(最小長)
0053: define('MIN_LEN_TEXT', 1);
0054:
0055: //テキスト(最小長)
0056: define('MAX_LEN_TEXT', 30);
0057:
0058: //テキスト(許容パターン)
0059: define('PAT_TEXT', '/^[\x20-\x7E]+$/');
0060:
0061: //フォント・ファイルの名称、配置位置
0062: $FontTable = array(
0063: array('VLゴシック', '../../../../common/font/VL-PGothic-Regular.ttf'),
0064: array('Throw My Hands Up in the Air', '../../../../common/font/ThrowMyHandsUpintheAir.ttf'),
0065: );
0066:
0067: /**
今回は、描画用フォントとして「VLゴシックフォントファミリ」と「Throw My Hands Up in the Air」の2種類を選択できるようにした。後者は手書き風フォントであり、OCRによる解析を回避する役に立つだろう。
使用するフォントを変更したり増やしたいときは、配列変数 $FontTable を編集して欲しい。
その他、入力バリデーションに必要なパラメータを定数で用意している。これらも自由に変更できる。
解説:ASCII文字を画像に変換
0126: /**
0127: * ASCII文字を画像に変換
0128: * @param int $mode 0=画面出力,1=画像出力
0129: * @param int $font 0|1(フォントの種類)
0130: * @param string $str ASCII文字列(UTF-8)
0131: * @return string BASE64
0132: */
0133: function ascii2image($mode, $font, $str) {
0134: global $FontTable;
0135:
0136: if ($str == '') return '';
0137:
0138: $res = '';
0139: $size = 20;
0140: $arr = imagettfbbox($size, 0, $FontTable[$font][1], $str); //サイズ取得
0141: $im = imagecreate($arr[4] - $arr[6] + 5, $arr[1] - $arr[7] + 5);
0142: //イメージストリーム作成
0143: $bgcolor = imagecolorallocate($im, 0xFF, 0xFF, 0xFF); // 背景色
0144: imagecolortransparent($im, $bgcolor); //透明化
0145: $color = imagecolorallocate($im, 0x00, 0x00, 0xCC); // 文字色
0146: imagettftext($im, $size, 0, -$arr[6], -$arr[7], $color, $FontTable[$font][1], $str); //出力
0147:
0148: if ($mode == 1) {
0149: header("Content-type: image/png"); //MIMEはPNGで
0150: imagepng($im); //ブラウザ表示
0151: } else {
0152: ob_start();
0153: imagepng($im); //ブラウザ表示
0154: $res = base64_encode(ob_get_clean());
0155: }
0156: imagedestroy($im); //後処理
0157:
0158: return $res;
0159: }
参考サイト
- PHPでTrueTypeフォントを利用する:ぱふぅ家のホームページ
- GD関数:PHP公式
そうした被害を避けるため、メールアドレスを画像化しておこう。正規ユーザーには迷惑をかけるが、自己防衛のためにやむを得ないことである。
(2022年6月27日)FastCGIで正常動作しない不具合を修正
(2022年5月22日)pahooInputData.php分離,PHP8対応