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();
コードを見れば説明するまでもないですが、一応流れは以下のようになっています。
- Securimageオブジェクトを生成。
- 画像のデザインに関するプロパティを指定。
- show()メソッドを実行。showメソッドでは、imagepng、imagejpeg、imagegifのいづれかが実行し画像をレスポンスボディに書き出します。
また、ダウンロードしたファイルに含まれるexample_form_example1.php、example_form_example2.phpのコードも見ると参考になると思います。
以下、各プロパティについて説明します。
image_width
生成される画像の幅
ttf_file
フォントファイルを指定します。
フォントファイルを相対パスまたは絶対パスで指定します。
以下の画像はFreeFontBold.ttfをsecurimage_show.phpと同じディレクトリに置いて相対パス"./FreeFontBold.ttf"を指定
image_bg_color
画像の背景色を指定
デフォルトは#FFF
text_color
画像のフォントの色
デフォルトは#333くらい
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にサンプルデータがあります。
showメソッド
showメソッドは唯一の引数としてバッググラウンドに使用する画像のパスを指定します。
以下の画像はbackgrounds/bg6.pngを指定したました。
以上で、自由にCAPTCHA画像を生成できるようになると思います。
ほとんど説明しましたが、すべてのプロパティを載せたわけではないので本家リファレンスも参考にしてみてください。
http://www.phpcaptcha.org/Securimage_Docs/li_Securimage.html