PEAR::Text_CAPTCHAを試す

| トラックバック(1)

ふと興味がわいたので、試してみました。

幸い、PNG画像データ生成はPHPの再コンパイルなど無しに出来たので、オプションの意味を理解するだけで使う事が出来ました。
サンプル

マニュアルのサンプルコードを参考に、『表示出来ればよし』まで。ファイルを作りたくなかったので、dataスキームで表示させています。ブラウザによって表示出来ませんが、あしからず。

以下、メモ。

  • フォントファイルまでのパスを、font_pathとfont_fileで指定
  • font_pathとfont_fileは単純に連結される(パスの正規化などはしてくれない)
  • なぜか、Imageドライバのinitメソッドに渡す引数が第1・第2ともにwidth(可変引数で渡した場合)
  • TTFが手元にあって、TTFからPNGを作れる(PHP)環境ならすぐ試す事が出来る

最後に、サンプルのコードを。

<?php
 
/**
 * @see <http://pear.php.net/manual/en/package.text.text-captcha.php#package.text.text-captcha.example>
 *
 *   - 以下のコードは上記ページに掲載されているコードを改変したコードです。
 */
 
require_once 'Text/CAPTCHA.php';
 
/**
 * オプション設定
 *
 *   - Text_CAPTCHA::factoryメソッドによって作られるドライバのinitメソッドに渡す
 *   - Imageドライバのinitメソッドは可変引数に対応している
 *     - ただし、第1、第2引数がともにwidthであるので、連想配列で渡す事にする
 *   - フォントファイルは読み込み可能な場所においてある必要がある
 *     - font_pathとfont_fileを単純に連結するため、パスの指定には注意
 */
$options = array(
                 'width'     => 300,
                 'height'    => 130,
                 'phrase'    => null,
                 'imageOptions' => array(
                                         'font_size' => 36,
                                         'font_path' => './fonts/',
                                         'font_file' => 'sazanami-gothic.ttf'
                                         ),
                 );
 
/**
 * ドライバを作成して初期化
 *
 *   - Imageドライバを選択
 *   - 先に設定したオプションを利用して初期化
 *   - PEAR::isErrorでエラー処理
 */
$c = Text_CAPTCHA::factory('Image');
$retval = $c->init($options);
if (PEAR::isError($retval)) {
    echo '<h1>Error generating CAPTCHA!</h1>';
    echo '<div>' . $retval->getMessage() . '</div>';
    exit;
}
 
 
/**
 * CAPTCHA画像をPNG形式で生成
 *
 *   - PEAR::isErrorでエラー処理
 */
$png = $c->getCAPTCHAAsPNG();
if (PEAR::isError($png)) {
    echo '<h1>Error generating CAPTCHA!</h1>';
    echo '<div>' . $png->getMessage() . '</div>';
    exit;
}
 
/**
 * 文字をテキストとして取得可能
 */
echo "<h1>Answer: " . $c->getPhrase() . "</h1>";
/**
 * 生成した画像データをdataスキームで表示
 */
echo "<img src=\"data:image/png;base64," . base64_encode($png) . "\" />";
 
?>
 
 

ちなみに、今回のサンプル内で利用しているフォントは、SourceForge.jp: Project Info - efontで配布されているさざなみフォントです。

トラックバック(1)

プロフィール

このブログ記事について

このページは、koshigoeが2007年1月31日 00:33に書いたブログ記事です。

ひとつ前のブログ記事は「ローカルでのマニュアル検索」です。

次のブログ記事は「Identicon楽しい」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。