PHPでCAPTCHA(画像認証) Securimageの使い方

PHPで使えるCAPTCHA(画像認証)のライブラリは、いくつかありますがSecurimageはパラメータを指定するだけでいろいろなパターンが作れるので便利です。

Securimageの使い方については、いくつか載っている記事もありますが、生成される画像の設定方法について説明している記事はなかったのでまとめて置きます。

Securimageの使い方については、ダウンロードしたの中にあるexample_form.phpクイックスタートを見れば大体分かると思います。

以下は、Securimageの本家サイトのCAPTHCA Gallaryの最初の画像です。

この画像は以下のコードで生成されます。

<?php

require_once 'securimage.php';

$img = new securimage();

$img->image_width = 260;
$img->image_height = 80;
$img->ttf_file = 'HOBOSTD.OTF';
$img->perturbation = 0.75;
$img->image_bg_color = new Securimage_Color(0x0, 0x0, 0x0);
$img->text_color = new Securimage_Color(0xff, 0xff, 0xff);
$img->use_transparent_text = false;
$img->num_lines = 7;
$img->line_color = new Securimage_Color(0xff, 0xaff, 0xff);

$img->show();

コードを見れば説明するまでもないですが、一応流れは以下のようになっています。

  1. Securimageオブジェクトを生成。
  2. 画像のデザインに関するプロパティを指定。
  3. show()メソッドを実行。showメソッドでは、imagepng、imagejpeg、imagegifのいづれかが実行し画像をレスポンスボディに書き出します。

また、ダウンロードしたファイルに含まれるexample_form_example1.php、example_form_example2.phpのコードも見ると参考になると思います。

以下、各プロパティについて説明します。

image_width

生成される画像の幅

image_height

生成される画像の高さ
以下の画像はimage_width=180、image_height=40の各半分の値を指定

ttf_file

フォントファイルを指定します。
フォントファイルを相対パスまたは絶対パスで指定します。
以下の画像はFreeFontBold.ttfをsecurimage_show.phpと同じディレクトリに置いて相対パス"./FreeFontBold.ttf"を指定

perturbation

画像のゆがみ具合を指定します。
以下の画像は0.9を指定した場合、だいぶ読めなくなります。

image_bg_color

画像の背景色を指定
デフォルトは#FFF

text_color

画像のフォントの色
デフォルトは#333くらい

use_transparent_text

字が薄くなります。

デフォルトはfalse

num_lines

読みにくくする線の数
0を指定すると線がなくなります。

デフォルトは10本くらい

line_color

読みにくくする線の色

securimage_show_example1の例も見ていきます。

$img = new securimage();

//Change some settings
$img->image_width = 250;
$img->image_height = 80;
$img->perturbation = 0.85;
$img->image_bg_color = new Securimage_Color("#f6f6f6");
$img->multi_text_color = array(new Securimage_Color("#3399ff"),
                               new Securimage_Color("#3300cc"),
                               new Securimage_Color("#3333cc"),
                               new Securimage_Color("#6666ff"),
                               new Securimage_Color("#99cccc")
                               );
$img->use_multi_text = true;
$img->text_angle_minimum = -5;
$img->text_angle_maximum = 5;
$img->use_transparent_text = true;
$img->text_transparency_percentage = 30; // 100 = completely transparent
$img->num_lines = 7;
$img->line_color = new Securimage_Color("#eaeaea");
$img->image_signature = 'phpcaptcha.org';
$img->signature_color = new Securimage_Color(rand(0, 64), rand(64, 128), rand(128, 255));
$img->use_wordlist = true; 

$img->show('backgrounds/bg3.jpg'); // alternate use:  $img->show('/path/to/background_image.jpg');
multi_text_color

文字ごとにランダムに色を変えることができます。
わかりやすく赤青緑

$img->multi_text_color = array(new Securimage_Color("#FF0000"),
                               new Securimage_Color("#00FF00"),
                               new Securimage_Color("#0000FF"));

use_multi_text

multi_text_colorを使う場合はtrueを指定します。

text_angle_minimum

文字の傾きの最小値

text_angle_maximum

文字の傾きの最大値
text_angleは、反時計回りに度数を指定します。
text_angle_minimumおよびtext_angle_maximumのどちらも50にした場合は以下の様に全文字左に傾きます。

text_transparency_percentage

use_transparent_text=trueにしたときの、透過具合を指定します。
100全透過になります。

image_signature

画像に署名を追加します。

signature_color

署名の色を指定します。

use_wordlist,wordlist_file

指定した文字列を表示する際に使用します。
words/words.txtにサンプルデータがあります。

code_length

文字数
以下の画像は4を指定した場合

showメソッド

showメソッドは唯一の引数としてバッググラウンドに使用する画像のパスを指定します。
以下の画像はbackgrounds/bg6.pngを指定したました。

以上で、自由にCAPTCHA画像を生成できるようになると思います。
ほとんど説明しましたが、すべてのプロパティを載せたわけではないので本家リファレンスも参考にしてみてください。
http://www.phpcaptcha.org/Securimage_Docs/li_Securimage.html