PHP網(wǎng)站建設(shè)開發(fā)用的圖形驗證碼源碼下載 By admin 2009/7/11 8:58:00 最近經(jīng)常有人問我這個Blog中的圖形驗證碼是如何做的.下面是這個PHP圖形驗證碼的源程序. 歡迎指正. 樣式: class.image.php /*=========================================================== class.image.php Zhu Weiwei Copyright © 2006-2008 http://www.jzxue.com China. All Rights Reserved. ===========================================================*/class Image{ private $img; private $width; private $height; private $color; private $font; private $mime="image/jpeg"; /* 1,GIF 2,JPEG 3,PNG */ private $type=2; private $angle=0; private $text; private $textW; private $textH; private $size=5; private $tcolor; function __construct($w="100", $h="50"){ $this->width=$w; $this->height=$h; } function create() { if ($this->type != 1 && function_exists('imagecreatetruecolor')) { // 本函數(shù)不能用于 GIF 文件格式 // 本函數(shù)需要 GD 2.0.1 或更高版本。 // 返回一個圖像標(biāo)識符,代表了一幅大小為 x_size 和 y_size 的黑色圖像 $this->img=imagecreatetruecolor($this->width,$this->height); }else { $this->img=imagecreate($this->width,$this->height); } } /* * 1=GIF 2=JPG * 3=PNG */ function createFromFile($f){ $imgInfo=getimagesize($f); $this->type=$imgInfo[2]; switch($this->type){ case 1: $this->loadGifFile($f); break; case 2: $this->loadJpegFile($f); break; case 3: $this->loadPngFile($f); break; default: die("This Image Type Not Support loadimage !"); exit(); } } function loadGifFile($f){ // 1.6 -- 2.0.28 //二者之間版本的 GD 庫時本函數(shù)不可用 $this->img=imagecreatefromgif($f ) or die("Load Gif picture error!") ; $this->width=imagesx($this->img); $this->height=imagesy($this->img); $this->mime="image/gif"; $this->type=1; } function loadJpegFile($f){ //JPEG 支持僅在 PHP 與 GD-1.8 或更高版本一起編譯時可用 $this->img=imagecreatefromjpeg($f) or die("Load Jpeg picture error!") ; $this->width=imagesx($this->img); $this->height=imagesy($this->img); $this->mime="image/jpeg"; $this->type=2; } function loadPngFile($f){ $this->img=imagecreatefrompng($f ) or die("Load Png picture error!") ; $this->width=imagesx($this->img); $this->height=imagesy($this->img); $this->mime="image/png"; $this->type=3; } function setBackgroundColor($r, $g, $b){ ## 用color 顏色填充了的矩形 ## 其左上角坐標(biāo)為 x1,y1 ## 右下角坐標(biāo)為 x2,y2 ## 0, 0 是圖像的最左上角 $color =imagecolorallocate($this->img, $r, $g, $b); return imagefilledrectangle($this->img, 0, 0, $this->width, $this->height, $color); } function setColor($r, $g, $b){ $this->color=imagecolorallocate($this->img, $r, $g, $b); return (-1 == $this->color) ? (false) : ($this->color); } function setTextColor($r, $g, $b){ $this->tcolor=imagecolorallocate($this->img, $r, $g, $b); return (-1 == $this->tcolor) ? (false) : ($this->tcolor); } function setText($t){ $this->text=$t; } function waterMark($r, $g, $b, $alpha){ $this->tcolor=imagecolorclosestalpha($this->img, $r, $g, $b, $alpha); } function setFontFile($f){ $this->font=$f; } function addTrueTypeText($xoffset,$yoffset){ #$x=( ( $this->width - $this->textW - 10) > 0) ? ($this->width - $this->textW - 10) : (0) ; #$y=( ( $this->height-10) > 0) ? ($this->height-10) : ($this->height); // 用 TrueType 字體向圖像寫入文本 // **x,y 坐標(biāo)是字符串左下角坐標(biāo),整幅圖像的左上角為 0,0 imagettftext($this->img, $this->size, $this->angle, $xoffset, $yoffset, $this->tcolor, $this->font, $this->text); } function addText() { // http://www.devdao.com/ 用 color 顏色將字符串 s 畫到 image // **x,y 坐標(biāo)是字符串左上角坐標(biāo),整幅圖像的左上角為 0,0 // 如果font 是 1,2,3,4 或 5,則使用內(nèi)置字體。 imagestring ($this->img, $font, $x, $y, $this->text, $this->tcolor); } function setSize($s){ $this->size=$s; } function setAngle($a){ $this->angle=$a; } function setWidth($w){ $this->width=$w; } function setHeight($h){ $this->height=$h; } function getWidth(){ return $this->width; } function getHeight(){ return $this->height; } function setPixel($x,$y,$color){ return imagesetpixel($this->img, $x, $y, $color); } function setLine($x1,$y1,$x2,$y2,$color){ return imageline($this->img, $x1, $y1, $x2, $y2, $color); } function createImageFile($f="default"){ if( !empty($f) ){ switch($this->type){ case 1: imagegif($this->img, $f.".gif",80); break; case 2: imagejpeg($this->img, $f.".jpg" , 80); break; case 3: imagepng($this->img, $f.".png", 80); break; default: die("This Image Type Not Support create !"); exit(); } imagedestroy($this->img); } } function show(){ header("Content-type: ".$this->mime); switch($this->type){ case 1: imagegif($this->img); break; case 2: imagejpeg($this->img); break; case 3: imagepng($this->img); break; default: die("This Image Type Not Support show !"); exit(); } imagedestroy($this->img); } /* Zoom Out Picture */ function roomOut($maxW, $maxH){ $WW=(($maxW) and ($this->width > $maxW)); $HH=(($maxH) and ($this->height > $maxH)); if($WW or $HH){ if($WW){ $wRatio =$maxW / $this->width; $wResize=true; } if($HH){ $hRatio =$maxH / $this->height; $hResize=true; } if($wResize and $hResize){ if($wRatio < $hRatio){ $ratio=$wRatio; }else{ $ratio=$hRatio; } }elseif($wResize){ $ratio=$wRatio; }elseif($hResize){ $ratio=$hRatio; } }else{ $ratio=1; } $newWidth=$this->width * $ratio; $newHeight=$this->height * $ratio; if(function_exists("imagecopyresampled")){ $newimg=imagecreatetruecolor($newWidth, $newHeight); imagecopyresampled($newimg, $this->img, 0, 0, 0, 0, $newWidth, $newHeight, $this->width, $this->height); }else{ $newimg=imagecreate($newWidth, $newHeight); imagecopyresized($newimg, $this->img, 0, 0, 0, 0, $newWidth, $newHeight, $this->width, $this->height); } $this->img=$newimg; $this->width= $newWidth; $this->height=$newHeight; }}imgverifycode.php /*=========================================================== imgverifycode.php Zhu Weiwei Copyright © 2006-2008 http://www.jzxue.com China. All Rights Reserved. ===========================================================*/<?phprequire('class.image.php');# char number$n = 4;#font size$s = 18;#font padding$p = 5;#font angle -a,a$a = 15;#image width$w = ($s+$p)*$n+$p;#image height;$h = intval($s*1.5); $c = ($h + $s)/2;$o = abs($h-$s-2*$p)/2;$r = 1; $str = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';#$str = '1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890abcdefghijklmnopqrstuvwxyz';#$str = '0123456789'; $len = strlen($str)-1;$code = ''; $im = new Image($w,$h);$im->create();$im->setBackgroundColor( mt_rand(0xdd,0xff), mt_rand(0xdd,0xff), mt_rand(0xdd,0xff) ); $im->setSize( $s ); for($i=$p; $i<$w-$p; $i=$i+$s+$p){ $char = $str{mt_rand(0,$len)}; $code = $code.$char; $im->setFontFile($CFG->dirroot.'/font/'.mt_rand(2,5).'.ttf'); $im->setText( $char ); $im->setAngle( mt_rand(-$a,$a) ); $im->setTextColor(mt_rand(0x0,0x66),mt_rand(0x0,0x66),mt_rand(0x0,0x66) ); $im->addTrueTypeText($i,mt_rand($c-$o,$c+$o)); for($j=0; $j<8*$r; $j++){ $xs = mt_rand($i-$s/2+$p,$i+$s/2-$p); $ys = mt_rand($p,$h-$p); $color = $im->setColor(mt_rand(0x0,0x66),mt_rand(0x0,0x66),mt_rand(0x0,0x66)); $im->setLine( $xs, $ys, $xs+mt_rand(-$s/2,$s/2), $ys+mt_rand(-$s/2,$s/2), $color); }} $SESS = new Session();$SESS->setParameter('verifycode',$code); for($i=0; $i<200*$r; $i++){ $color = $im->setColor(mt_rand(0x0,0x66),mt_rand(0x0,0x66),mt_rand(0x0,0x66)); $im->setPixel(mt_rand(0,$w), mt_rand(0,$h),$color);} $im->show(); 分享聯(lián)系我們 掃二維碼與項目經(jīng)理溝通 我們在微信上24小時期待你的聲音 感謝您的關(guān)注分享“PHP網(wǎng)站建設(shè)開發(fā)用的圖形驗證碼源碼下載” 煙寒網(wǎng)絡(luò)真誠為您服務(wù) ,點擊客服直接咨詢下單. 立即咨詢 我們服務(wù) 網(wǎng)站建設(shè) 高端網(wǎng)站建設(shè)服務(wù)商、相信品牌力量、相信知名企業(yè);制作后收費13014982176! 微信小程序/微信公眾號 微信小程序 背靠10億流量,不論用戶需求是什么,都能被開發(fā)使用 一點創(chuàng)意,就能在“社交圈”中脫穎而出。 網(wǎng)站優(yōu)化/SEO 讓您的網(wǎng)站更靠近排名位置,讓客戶更容易找到您,seo優(yōu)化是一個漫長過程,整個網(wǎng)站營銷花最少的錢起最大的作用。 欄目分類 平面廣告設(shè)計知識網(wǎng)站優(yōu)化技術(shù)網(wǎng)站建站知識網(wǎng)站模板分享微信公眾號開發(fā)小程序技術(shù)APP應(yīng)用Python技術(shù)文章web開發(fā) 網(wǎng)站建設(shè)建設(shè)知識 平面設(shè)計師我們需要懂得印刷知識與尺寸規(guī)范開發(fā)一個小程序的成本是多少南寧小程序設(shè)計要注意的七大要點?響應(yīng)式網(wǎng)站有哪些優(yōu)點為什么要選擇響應(yīng)式網(wǎng)站建設(shè)風(fēng)格小程序初次發(fā)布,審核需要多久呢?網(wǎng)站的未來 你覺得會不會被淘汰?南寧煙寒網(wǎng)絡(luò)提供網(wǎng)站運營托管網(wǎng)站升級改版微信小程序開發(fā)流程的兩種方法科普網(wǎng)站優(yōu)化注意這8點讓你網(wǎng)站排名上升什么是微信什么是服務(wù)號? 如何申請使用如何建設(shè)企業(yè)商城網(wǎng)站?商城網(wǎng)站建設(shè)之前要考慮到那些細(xì)...南寧網(wǎng)絡(luò)公司教新手搭建網(wǎng)站的技巧 熱點標(biāo)簽 網(wǎng)站建設(shè) 品牌設(shè)計 微信小程序 網(wǎng)站優(yōu)化 平面廣告設(shè)計知識 網(wǎng)站優(yōu)化技術(shù) 網(wǎng)站建站知識 網(wǎng)站模板分享 微信公眾號開發(fā) 小程序技術(shù) APP應(yīng)用