当前位置:首页 > PHP教程 > php图像处理 > 列表

php 图片中文验证码

发布:smiling 来源: PHP粉丝网  添加日期:2014-08-20 09:55:01 浏览: 评论:0 
  1. <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;" /> 
  2.  
  3. <?php 
  4. session_start(); 
  5.  
  6. $vi = new vCodeImage; 
  7. $vi->SetImage(1,4,65,20,80,1); 
  8.  
  9. class vCodeImage{ 
  10.  var $mode;  //1:数字模式,2:字母模式,3:数字字母模式,其他:数字字母优化模式 
  11.  var $v_num;  //验证码个数 
  12.  var $img_w;  //验证码图像宽度 
  13.  var $img_h;  //验证码图像高度 
  14.  var $int_pixel_num;  //干扰像素个数 
  15.  var $int_line_num;  //干扰线条数 
  16.  var $font_dir;   //字体文件相对路径 
  17.  var $border;   //图像边框 
  18.  var $borderColor;  //图像边框颜色 
  19.  
  20.  function SetImage($made,$v_num,$img_w,$img_h,$int_pixel_num,$int_line_num,$font_dir='../font',$border=true,$borderColor='255,200,85'){ 
  21.   if(!isset($_SESSION['vCode'])){ 
  22.    session_register('vCode'); 
  23.   } 
  24.   $_SESSION['vCode']=""
  25.    
  26.   $this->mode = $made
  27.   $this->v_num = $v_num
  28.   $this->img_w = $img_w
  29.   $this->img_h = $img_h
  30.   $this->int_pixel_num = $int_pixel_num
  31.   $this->int_line_num = $int_line_num
  32.   $this->font_dir = $font_dir
  33.   $this->border = $border
  34.   $this->borderColor = $borderColor
  35.   $this->GenerateImage(); 
  36.  } 
  37.  
  38.  function GetChar($mode){ 
  39.   if($mode == "1"){ 
  40.    $ychar = "0,1,2,3,4,5,6,7,8,9"
  41.   } 
  42.   else if($mode == "2"){ 
  43.    $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"
  44.   } 
  45.   else if($mode == "3"){ 
  46.    $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"
  47.   } 
  48.   else 
  49.    $ychar = "3,4,5,6,7,8,9,A,B,C,D,H,K,P,R,S,T,W,X,Y"
  50.   return $ychar
  51.  } 
  52.   
  53.  function RandColor($rs,$re,$gs,$ge,$bs,$be){ 
  54.   $r = mt_rand($rs,$re); 
  55.   $g = mt_rand($gs,$ge); 
  56.   $b = mt_rand($bs,$be); 
  57.   return array($r,$g,$b); 
  58.  } 
  59.   
  60.  function GenerateImage(){ 
  61.   $im = imagecreate($this->img_w,$this->img_h); 
  62.  
  63.   $black = imagecolorallocate($im, 0,0,0); 
  64.   $white = imagecolorallocate($im, 255,255,255);  
  65.   $bgcolor = imagecolorallocate($im, 250,250,250); 
  66.  
  67.   imagefill($im,0,0,$bgcolor); 
  68.  
  69.   $fonts = ScanDir($this->font_dir); 
  70.   $fmax = count($fonts) - 2; 
  71.  
  72.   $ychar = $this->GetChar($this->mode); 
  73.   $list = explode(",",$ychar); 
  74.  
  75.   $x = mt_rand(2,$this->img_w/($this->v_num+2)); 
  76.   $cmax = count($list) - 1; 
  77.  
  78.   $v_code = ''
  79.  
  80.   for($i=0;$i<$this->v_num;$i++) //验证码 
  81.   { 
  82.    $randnum = mt_rand(0,$cmax); 
  83.    $this_char = $list[$randnum]; 
  84.    $v_code .= $this_char
  85.    $size = mt_rand(intval($this->img_w/5),intval($this->img_w/4)); 
  86.    $angle = mt_rand(-20,20); 
  87.    $y = mt_rand(($size+2),($this->img_h-2)); 
  88.    if($this->border) 
  89.     $y = mt_rand(($size+3),($this->img_h-3)); 
  90.    $rand_color = $this->RandColor(0,200,0,100,0,250); 
  91.    $randcolor = imagecolorallocate($im,$rand_color[0],$rand_color[1],$rand_color[2]); 
  92.    $fontrand = mt_rand(2, $fmax); 
  93.    $font = "$this->font_dir/".$fonts[$fontrand]; 
  94.    imagettftext($im$size$angle$x$y$randcolor$font$this_char); 
  95.    $x = $x + intval($this->img_w/($this->v_num+1)); 
  96.   } 
  97.  
  98.   for($i=0;$i<$this->int_pixel_num;$i++){//干扰像素 
  99.    $rand_color = $this->RandColor(50,250,0,250,50,250); 
  100.    $rand_color_pixel = imagecolorallocate($im,$rand_color[0],$rand_color[1],$rand_color[2]); 
  101.    imagesetpixel($im, mt_rand()%$this->img_w, mt_rand()%$this->img_h, $rand_color_pixel); 
  102.   } 
  103.  
  104.   for($i=0;$i<$this->int_line_num;$i++){ //干扰线 
  105.    $rand_color = $this->RandColor(0,250,0,250,0,250); 
  106.    $rand_color_line = imagecolorallocate($im,$rand_color[0],$rand_color[1],$rand_color[2]); 
  107.    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); 
  108.   } 
  109.  
  110.   if($this->border) //画出边框 
  111.   { 
  112.    if(preg_match("/^\d{1,3},\d{1,3},\d{1,3}$/",$this->borderColor)){ 
  113.     $borderColor = explode(',',$this->borderColor); 
  114.    } 
  115.    $border_color_line = imagecolorallocate($im,$borderColor[0],$borderColor[1],$borderColor[2]); 
  116.    imageline($im, 0, 0, $this->img_w, 0, $border_color_line); //上横 
  117.    imageline($im, 0, 0, 0, $this->img_h, $border_color_line); //左竖 
  118.    imageline($im, 0, $this->img_h-1, $this->img_w, $this->img_h-1, $border_color_line); //下横 
  119.    imageline($im$this->img_w-1, 0, $this->img_w-1, $this->img_h, $border_color_line); //右竖 
  120.   } 
  121.  
  122.   imageantialias($im,true); //抗锯齿 
  123.  
  124.   $time = time(); 
  125.   $_SESSION['vCode'] = $v_code."|".$time//把验证码和生成时间负值给$_SESSION[vCode] 
  126.  
  127.   //生成图像给浏览器 
  128.   if (function_exists("imagegif")) { 
  129.       header ("Content-type: image/gif"); 
  130.       imagegif($im); 
  131.   } 
  132.   elseif (function_exists("imagepng")) { 
  133.       header ("Content-type: image/png"); 
  134.       imagepng($im); 
  135.   } 
  136.   elseif (function_exists("imagejpeg")) { 
  137.       header ("Content-type: image/jpeg"); 
  138.       imagejpeg($im"", 80); 
  139.   } 
  140.   elseif (function_exists("imagewbmp")) { 
  141.       header ("Content-type: image/vnd.wap.wbmp"); 
  142.       imagewbmp($im); 
  143.   }//开源代码phpfensi.com 
  144.   else 
  145.       die("No Image Support On This Server !"); 
  146.   
  147.   imagedestroy($im); 
  148.  } 
  149. ?> 

Tags: php图片验证码 php中文验证码

分享到:

相关文章