php 图片中文验证码
<img src="verify_image.php" alt="点此刷新验证码" name="verify_code" width="65" height="20" border="0" id="verify_code" onclick="document.getElementById('verify_code').src='verify_image.php?'+Math.random();" style="cursor:pointer;" />
<?php session_start(); $vi = new vCodeImage; $vi->SetImage(1, 4, 65, 20, 80, 1); class vCodeImage { var $mode; //1:数字模式,2:字母模式,3:数字字母模式,其他:数字字母优化模式 var $v_num; //验证码个数 var $img_w; //验证码图像宽度 var $img_h; //验证码图像高度 var $int_pixel_num; //干扰像素个数 var $int_line_num; //干扰线条数 var $font_dir; //字体文件相对路径 var $border; //图像边框 var $borderColor; //图像边框颜色 function SetImage($made, $v_num, $img_w, $img_h, $int_pixel_num, $int_line_num, $font_dir = '../font', $border = true, $borderColor = '255,200,85') { if (!isset($_SESSION['vCode'])) { session_register('vCode'); } $_SESSION['vCode'] = ""; $this->mode = $made; $this->v_num = $v_num; $this->img_w = $img_w; $this->img_h = $img_h; $this->int_pixel_num = $int_pixel_num; $this->int_line_num = $int_line_num; $this->font_dir = $font_dir; $this->border = $border; $this->borderColor = $borderColor; $this->GenerateImage(); } function GetChar($mode) { if ($mode == "1") { $ychar = "0,1,2,3,4,5,6,7,8,9"; } else if ($mode == "2") { $ychar = "A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z"; } else if ($mode == "3") { $ychar = "0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z"; } else $ychar = "3,4,5,6,7,8,9,A,B,C,D,H,K,P,R,S,T,W,X,Y"; return $ychar; } function RandColor($rs, $re, $gs, $ge, $bs, $be) { $r = mt_rand($rs, $re); $g = mt_rand($gs, $ge); $b = mt_rand($bs, $be); return array( $r, $g, $b ); } function GenerateImage() { $im = imagecreate($this->img_w, $this->img_h); $black = imagecolorallocate($im, 0, 0, 0); $white = imagecolorallocate($im, 255, 255, 255); $bgcolor = imagecolorallocate($im, 250, 250, 250); imagefill($im, 0, 0, $bgcolor); $fonts = ScanDir($this->font_dir); $fmax = count($fonts) - 2; $ychar = $this->GetChar($this->mode); $list = explode(",", $ychar); $x = mt_rand(2, $this->img_w / ($this->v_num + 2)); $cmax = count($list) - 1; $v_code = ''; for ($i = 0; $i < $this->v_num; $i++) //验证码 { $randnum = mt_rand(0, $cmax); $this_char = $list[$randnum]; $v_code.= $this_char; $size = mt_rand(intval($this->img_w / 5) , intval($this->img_w / 4)); $angle = mt_rand(-20, 20); $y = mt_rand(($size + 2) , ($this->img_h - 2)); if ($this->border) $y = mt_rand(($size + 3) , ($this->img_h - 3)); $rand_color = $this->RandColor(0, 200, 0, 100, 0, 250); $randcolor = imagecolorallocate($im, $rand_color[0], $rand_color[1], $rand_color[2]); $fontrand = mt_rand(2, $fmax); $font = "$this->font_dir/" . $fonts[$fontrand]; imagettftext($im, $size, $angle, $x, $y, $randcolor, $font, $this_char); $x = $x + intval($this->img_w / ($this->v_num + 1)); } for ($i = 0; $i < $this->int_pixel_num; $i++) { //干扰像素 $rand_color = $this->RandColor(50, 250, 0, 250, 50, 250); $rand_color_pixel = imagecolorallocate($im, $rand_color[0], $rand_color[1], $rand_color[2]); imagesetpixel($im, mt_rand() % $this->img_w, mt_rand() % $this->img_h, $rand_color_pixel); } for ($i = 0; $i < $this->int_line_num; $i++) { //干扰线 $rand_color = $this->RandColor(0, 250, 0, 250, 0, 250); $rand_color_line = imagecolorallocate($im, $rand_color[0], $rand_color[1], $rand_color[2]); imageline($im, mt_rand(0, intval($this->img_w / 3)) , mt_rand(0, $this->img_h) , mt_rand(intval($this->img_w - ($this->img_w / 3)) , $this->img_w) , mt_rand(0, $this->img_h) , $rand_color_line); } if ($this->border) //画出边框 { if (preg_match("/^d{1,3},d{1,3},d{1,3}$/", $this->borderColor)) { $borderColor = explode(',', $this->borderColor); } $border_color_line = imagecolorallocate($im, $borderColor[0], $borderColor[1], $borderColor[2]); imageline($im, 0, 0, $this->img_w, 0, $border_color_line); //上横 imageline($im, 0, 0, 0, $this->img_h, $border_color_line); //左竖 imageline($im, 0, $this->img_h - 1, $this->img_w, $this->img_h - 1, $border_color_line); //下横 imageline($im, $this->img_w - 1, 0, $this->img_w - 1, $this->img_h, $border_color_line); //右竖 } imageantialias($im, true); //抗锯齿 $time = time(); $_SESSION['vCode'] = $v_code . "|" . $time; //把验证码和生成时间负值给$_SESSION[vCode] //生成图像给浏览器 if (function_exists("imagegif")) { header("Content-type: image/gif"); imagegif($im); } elseif (function_exists("imagepng")) { header("Content-type: image/png"); imagepng($im); } elseif (function_exists("imagejpeg")) { header("Content-type: image/jpeg"); imagejpeg($im, "", 80); } elseif (function_exists("imagewbmp")) { header("Content-type: image/vnd.wap.wbmp"); imagewbmp($im); } else die("No Image Support On This Server !"); imagedestroy($im); } }
本文地址:http://www.phprm.com/tuxiang/fs4508.html
转载随意,但请附上文章地址:-)