/* * Captcha Class base on PHP GD Lib * @author Design * @version 1.0 * @copyright js8.in 2010 * @demo * Include (' captchaclass.php '); * $captchaDemo =new Captcha (); * $captchaDemo->createimage (); */ Class captcha{ @ Define CAPTCHA Picture height Private $height; @ Define CAPTCHA Picture width Private $width; @ Defines the number of Captcha characters Private $textNum; @ Define CAPTCHA character content Private $textContent; @ Define character Color Private $fontColor; @ Defines the randomly-out text color Private $randFontColor; @ Define Font Size Private $fontSize; @ Define Font Private $fontFamily; @ Define Background color Private $bgColor; @ Define a randomly-out background color Private $randBgColor; @ Define Character language Private $textLang; @ Define number of interference points Private $noisePoint; @ Define number of interference lines Private $noiseLine; @ defines whether to distort Private $distortion; @ Define distort picture source Private $distortionImage; @ Defines if there is a border Private $showBorder; @ Define CAPTCHA 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 the 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 number of interference points Public Function Setnoisepoint ($n) { $this->noisepoint= $n; } @ Set number of interference lines Public Function Setnoiseline ($n) { $this->noiseline= $n; } @ setting is distorted Public Function Setdistortion ($b) { $this->distortion= $b; } @ Set whether borders are displayed Public Function Setshowborder ($border) { $this->showborder= $border; } @ Initialize Verification code 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); } @ Generate 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 Encoding 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) ; } } @ Warp 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), $y, $rgbColor); } } $this->image= $this->distortionimage; } @ Generate Verification Code picture Public Function CreateImage () { $this->initimage (); Create a basic picture $this->createtext (); Output Verification Code characters 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 a border Imagepng ($this->image); Imagedestroy ($this->image); if ($this->distortion) {Imagedestroy ($this, $distortionImage);} return $this->textcontent; } } ?> How to use:
Session_Start (); Header ("Content-type:image/png"); Include (' captcha5_class.php '); $captcha 5=new Captcha (); @ Set Verification Code width $captcha 5->setwidth (200); @ Set Verification Code height $captcha 5->setheight (50); @ Set the 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 number of interference points $captcha 5->setnoisepoint (600); @ Set number of interference lines $captcha 5->setnoiseline (10); @ setting is distorted $captcha 5->setdistortion (TRUE); @ Set whether borders are displayed $captcha 5->setshowborder (TRUE); Output Verification Code $code = $captcha 5->createimage (); $_session[' Captchacode ' [' content ']= $code; $_session[' Captchacode ' [' Time ']=microtime (); ?> |