Copy Code code as follows:
<?php
/*
* Captcha Class base on PHP GD Lib
* @author Design
* @version 1.0
* @demo
* Include (' captchaclass.php ');
* $captchaDemo =new Captcha ();
* $captchaDemo->createimage ();
*/
Class captcha{
@ Define Verification Code picture height
Private $height;
@ Defines the width of the verification code picture
Private $width;
@ Defines the number of Authenticode characters
Private $textNum;
@ Define Authenticode character content
Private $textContent;
@ Define character Color
Private $fontColor;
@ defines the random text color
Private $randFontColor;
@ Define Font Size
Private $fontSize;
@ Define Font
Private $fontFamily;
@ Define Background color
Private $bgColor;
@ defines a random background color
Private $randBgColor;
@ Define Character language
Private $textLang;
@ Define number of jamming points
Private $noisePoint;
@ Define number of interference lines
Private $noiseLine;
@ definition is distorted
Private $distortion;
@ Define distorted picture source
Private $distortionImage;
@ Defines whether there is a border
Private $showBorder;
@ Define Authenticode Picture source
Private $image;
@Constructor Constructors
Public Function Captcha () {
$this->textnum=4;
$this->fontsize=16;
$this->fontfamily= ' C:\windows\fontsSIMYOU.ttf ';//set Chinese font, can be changed to Linux directory
$this->textlang= ' en ';
$this->noisepoint=30;
$this->noiseline=3;
$this->distortion=false;
$this->showborder=false;
}
@ Set Picture width
Public Function SetWidth ($w) {
$this->width= $w;
}
@ Set Picture height
Public Function SetHeight ($h) {
$this->height= $h;
}
@ Set Number of characters
Public Function Settextnumber ($textN) {
$this->textnum= $textN;
}
@ Set Character color
Public Function Setfontcolor ($FC) {
$this->fontcolor=sscanf ($FC, ' #%2x%2x%2x ');
}
@ Set Font size
Public Function Setfontsize ($n) {
$this->fontsize= $n;
}
@ Set Font
Public Function setfontfamily ($FFURL) {
$this->fontfamily= $ffUrl;
}
@ Set Character language
Public Function Settextlang ($lang) {
$this->textlang= $lang;
}
@ Set Picture background
Public Function Setbgcolor ($BC) {
$this->bgcolor=sscanf ($BC, ' #%2x%2x%2x ');
}
@ Set the number of jamming points
Public Function Setnoisepoint ($n) {
$this->noisepoint= $n;
}
@ Set the number of interference lines
Public Function Setnoiseline ($n) {
$this->noiseline= $n;
}
@ setting is distorted
Public Function Setdistortion ($b) {
$this->distortion= $b;
}
@ Sets whether borders are displayed
Public Function Setshowborder ($border) {
$this->showborder= $border;
}
@ Initialization Captcha Picture
Public Function 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->width, $this->height);
if (Empty ($this->bgcolor)) {
$this->randbgcolor=imagecolorallocate ($this->image,mt_rand (100,255), Mt_rand (100,255), Mt_rand (100,255));
}else{
$this->randbgcolor=imagecolorallocate ($this->image, $this->bgcolor[0], $this->bgcolor[1], $this-> BGCOLOR[2]);
}
Imagefill ($this->image,0,0, $this->randbgcolor);
}
@ produces random characters
Public Function Randtext ($type) {
$string = ';
Switch ($type) {
Case ' en ':
$str = ' ABCDEFGHJKLMNPQRSTUVWXY3456789 ';
For ($i =0 $i < $this->textnum; $i + +) {
$string = $string. ', '. $str [Mt_rand (0,29)];
}
Break
Case ' CN ':
For ($i =0 $i < $this->textnum; $i + +) {
$string = $string. ', ' Chr (rand (0XB0,0XCC)). Chr (rand (0XA1,0XBB));
}
$string =iconv (' GB2312 ', ' UTF-8 ', $string); Convert code to UTF8
Break
}
Return substr ($string, 1);
}
@ Output text to verification code
Public Function 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));
}else{
$this->randfontcolor=imagecolorallocate ($this->image, $this->fontcolor[0], $this->fontcolor[1],$ THIS->FONTCOLOR[2]);
}
For ($i =0 $i < $this->textnum; $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]);
}
}
@ Generate Interference points
Public Function Createnoisepoint () {
For ($i =0 $i < $this->noisepoint; $i + +) {
$pointColor =imagecolorallocate ($this->image,mt_rand (0,255), Mt_rand (0,255), Mt_rand (0,255));
Imagesetpixel ($this->image,mt_rand (0, $this->width), Mt_rand (0, $this->height), $pointColor);
}
}
@ Generate interference Line
Public Function Createnoiseline () {
For ($i =0 $i < $this->noiseline; $i + +) {
$lineColor =imagecolorallocate ($this->image,mt_rand (0,255), Mt_rand (0,255), 20);
Imageline ($this->image,0,mt_rand (0, $this->width), $this->width,mt_rand (0, $this->height), $lineColor) ;
}
}
@ Distort Text
Public Function Distortiontext () {
$this->distortionimage=imagecreatetruecolor ($this->width, $this->height);
Imagefill ($this->distortionimage,0,0, $this->randbgcolor);
For ($x =0 $x < $this->width; $x + +) {
For ($y =0 $y < $this->height; $y + +) {
$rgbColor =imagecolorat ($this->image, $x, $y);
Imagesetpixel ($this->distortionimage, (int) ($x +sin ($y/$this->height*2*m_pi-m_pi*0.5) *3), $y, $rgbColor);
}
}
$this->image= $this->distortionimage;
}
@ Generate Verification Code picture
Public Function CreateImage () {
$this->initimage (); Create a basic picture
$this->createtext (); Output Verification Code character
if ($this->distortion) {$this->distortiontext ();}//Warp text
$this->createnoisepoint (); Generate Interference points
$this->createnoiseline (); Generate interference lines
if ($this->showborder) {imagerectangle ($this->image,0,0, $this->width-1, $this->height-1, $this-> Randfontcolor);} Add border
Imagepng ($this->image);
Imagedestroy ($this->image);
if ($this->distortion) {Imagedestroy ($this-> $distortionImage);}
return $this->textcontent;
}
}
?> Use Method:
<?php
Session_Start ();
Header ("Content-type:image/png");
Include (' captcha5_class.php ');
$captcha 5=new Captcha ();
@ Set Verification Code width
$captcha 5->setwidth (200);
@ Set Authentication Code height
$captcha 5->setheight (50);
@ Set Number of characters
$captcha 5->settextnumber (5);
@ Set Character color
$captcha 5->setfontcolor (' #ff9900 ');
@ Set Font size
$captcha 5->setfontsize (25);
@ Set Font
$captcha 5->setfontfamily (' C:\windows\fonts\STXINGKA. TTF ');
@ Set Language
$captcha 5->settextlang (' cn ');
@ Set Background color
$captcha 5->setbgcolor (' #000000 ');
@ Set the number of jamming points
$captcha 5->setnoisepoint (600);
@ Set the number of interference lines
$captcha 5->setnoiseline (10);
@ setting is distorted
$captcha 5->setdistortion (TRUE);
@ Sets whether borders are displayed
$captcha 5->setshowborder (TRUE);
Output Verification Code
$code = $captcha 5->createimage ();
$_session[' Captchacode ' [' content ']= $code;
$_session[' Captchacode ' [' Time ']]=microtime ();
?>