/*
* PHP GD Lib をベースにした Captcha クラス
* @作者デザイン
* @バージョン1.0
* @copyright js8.in 2010
* @デモ
* include('captchaClass.php');
* $captchaDemo=新しいキャプチャ();
* $captchaDemo->createImage();
*/
クラスキャプチャ{
//@認証コード画像の高さを定義します
プライベート $height;
//@確認コード画像の幅を定義します
プライベート $width;
//@認証コードの文字数を定義します
プライベート $textNum;
//@検証コードの文字内容を定義します
プライベート $textContent;
//@文字の色を定義します
プライベート $fontColor;
//@ランダムなテキストの色を定義します
プライベート $randFontColor;
//@フォントサイズを定義します
プライベート $fontSize;
//@フォントを定義します
プライベート $fontFamily;
//@背景色を定義します
プライベート $bgColor;
//@ランダムな背景色を定義します
プライベート $randBgColor;
//@文字言語を定義します
プライベート $textLang;
//@干渉点の数を定義します
プライベート $noisePoint;
//@干渉線の数を定義します
プライベート $noiseLine;
//@定義が歪んでいるかどうか
プライベート $distortion;
//@歪んだ画像ソースを定義します
プライベート $distortionImage;
//@境界線があるかどうかを定義します
プライベート $showBorder;
//@検証コードの画像ソースを定義します
プライベート $image;
//@Constructor コンストラクター
パブリック関数 Captcha(){
$this->textNum=4;
$this->fontSize=16;
$this->fontFamily='c:windowsfontsSIMYOU.ttf';//Linux ディレクトリに変更できる中国語フォントを設定します
$this->textLang='en';
$this->noisePoint=30;
$this->noiseLine=3;
$this->distortion=false;
$this->showBorder=false;
}
//@画像の幅を設定します
パブリック関数 setWidth($w){
$this->width=$w;
}
//@画像の高さを設定します
パブリック関数 setHeight($h){
$this->身長=$h;
}
//@文字数を設定します
パブリック関数 setTextNumber($textN){
$this->textNum=$textN;
}
//@文字色を設定します
パブリック関数 setFontColor($fc){
$this->fontColor=sscanf($fc,'#%2x%2x%2x');
}
//@フォントサイズを設定します
パブリック関数 setFontSize($n){
$this->fontSize=$n;
}
//@フォントを設定します
パブリック関数 setFontFamily($ffUrl){
$this->fontFamily=$ffUrl;
}
//@文字言語を設定します
パブリック関数 setTextLang($lang){
$this->textLang=$lang;
}
//@画像の背景を設定します
パブリック関数 setBgColor($bc){
$this->bgColor=sscanf($bc,'#%2x%2x%2x');
}
//@干渉点数を設定
パブリック関数 setNoisePoint($n){
$this->noisePoint=$n;
}
//@干渉線の数を設定します
パブリック関数 setNoiseLine($n){
$this->noiseLine=$n;
}
//@歪ませるかどうかを設定します
パブリック関数 setDistortion($b){
$this->歪み=$b;
}
//@枠線を表示するかどうかを設定します
パブリック関数 setShowBorder($border){
$this->showBorder=$border;
}
//@初期化確認コードの画像
パブリック関数 initImage(){
if(empty($this->width)){$this->width=floor($this->fontSize*1.3)*$this->textNum+10;}
if(empty($this->height)){$this->height=$this->fontSize*2;}
$this->image=imagecreatetruecolor($this->幅,$this->高さ);
if(empty($this->bgColor)){
$this->randBgColor=imagecolorallocate($this->image,mt_rand(100,255),mt_rand(100,255),mt_rand(100,255));
}その他{
$this->randBgColor=imagecolorallocate($this->image,$this->bgColor[0],$this->bgColor[1],$this->bgColor[2]);
}
imagefill($this->image,0,0,$this->randBgColor);
}
//@ランダムな文字を生成します
パブリック関数 randText($type){
$string='';
スイッチ($type){
ケース「en」:
$str='ABCDEFGHJKLMNPQRSTUVWXY3456789';
for($i=0;$itextNum;$i++){
$string=$string.','.$str[mt_rand(0,29)];
}
休憩;
ケース「cn」:
for($i=0;$itextNum;$i++) {
$string=$string.','.chr(rand(0xB0,0xCC)).chr(rand(0xA1,0xBB));
}
$string=iconv('GB2312','UTF-8',$string); //エンコーディングをutf8に変換します
休憩;
}
return substr($string,1);
}
//@認証コードにテキストを出力します
パブリック関数 createText(){
$textArray=explode(',',$this->randText($this->textLang));
$this->textContent=join('',$textArray);
if(empty($this->fontColor)){
$this->randFontColor=imagecolorallocate($this->image,mt_rand(0,100),mt_rand(0,100),mt_rand(0,100));
}その他{
$this->randFontColor=imagecolorallocate($this->image,$this->fontColor[0],$this->fontColor[1],$this->fontColor[2]);
}
for($i=0;$itextNum;$i++){
$angle=mt_rand(-1,1)*mt_rand(1,20);
imagettftext($this->image,$this->fontSize,$angle,5+$i*floor($this->fontSize*1.3),floor($this->height*0.75),$this ->randFontColor,$this->fontFamily,$textArray[$i]);
}
}
//@干渉点を生成する
パブリック関数 createNoisePoint(){
for($i=0;$inoisePoint;$i++){
$pointColor=imagecolorallocate($this->image,mt_rand(0,255),mt_rand(0,255),mt_rand(0,255));
imagesetpixel($this->image,mt_rand(0,$this->幅),mt_rand(0,$this->高さ),$pointColor);
}
}
//@干渉線を生成します
パブリック関数 createNoiseLine(){
for($i=0;$inoiseLine;$i++) { $lineColor=imagecolorallocate($this->image,mt_rand(0,255),mt_rand(0,255),20);
imageline($this->image,0,mt_rand(0,$this->幅),$this->幅,mt_rand(0,$this->高さ),$lineColor);
}
}
//@扭曲文字
パブリック関数distortionText(){
$this->distortionImage=imagecreatetruecolor($this->幅,$this->高さ);
imagefill($this->distortionImage,0,0,$this->randBgColor);
for($x=0;$xwidth;$x++){
for($y=0;$y高さ;$y++){
$rgbColor=imagecolorat($this->image,$x,$y);
imagesetpixel($this->distortionImage,(int)($x+sin($y/$this->高さ*2*M_PI-M_PI*0.5)*3),$y,$rgbColor);
}
}
$this->image=$this->歪み画像;
}
//@生成验证码图片
パブリック関数 createImage(){
$this->initImage(); //基本画像 を作成
$this->createText(); //出验证码文字
if($this->distortion){$this->distortionText();} //扭曲文字
$this->createNoisePoint(); //産干扰点
$this->createNoiseLine(); //産干扰線
if($this->showBorder){imagerectangle($this->image,0,0,$this->width-1,$this->height-1,$this->randFontColor);} //追加边框
imagepng($this->image);
imagedestroy($this->image);
if($this->distortion){imagedestroy($this->$distortionImage);}
$this->textContentを返す;
}
}
?>使用方法:
//session_start();
header("コンテンツタイプ:画像/png");
include('captcha5_class.php');
$captcha5=新しいキャプチャ();
//@设置验证码宽度
//$captcha5->setWidth(200);
//@設置验证码高さ
//$captcha5->setHeight(50);
//@设置文字数
$captcha5->setTextNumber(5);
//@设置文字符颜色
//$captcha5->setFontColor('#ff9900');
//@设置字号大小
//$captcha5->setFontSize(25);
//@设置文字体
$captcha5->setFontFamily('c:windowsfontsSTXINGKA.TTF');
//@设置语言
$captcha5->setTextLang('cn');
//@設置背景颜色
//$captcha5->setBgColor('#000000');
//@设置干扰点数
//$captcha5->setNoisePoint(600);
//@设置干扰線数
//$captcha5->setNoiseLine(10);
//@设置是否扭曲
//$captcha5->setDistortion(true);
//@設置かどうか表示边框
$captcha5->setShowBorder(true);
//出验证码
$code=$captcha5->createImage();
//$_SESSION['captchaCode']['content']=$code;
//$_SESSION['captchaCode']['time']=microtime();
?>
|