首页 > 编程技术 > php

php 图片 中文验证码

发布时间:2016-11-25 16:59

php 图片 中文验证码

<img" width=100% 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);
 }
}
?>

php 生成验证码程序

<?php
$consts = 'bcdfghjkmnpqrstwxyz';
 $vowels = 'aei23456789';
 for ($x = 0; $x < 6; $x++)
 {
  $const[$x] = substr($consts, mt_rand(0,strlen($consts)-1),1);
  $vow[$x] = substr($vowels, mt_rand(0,strlen($vowels)-1),1);
 }
 $radomstring = $const[0] . $vow[0] .$const[2] . $const[1] . $vow[1] . $const[3] . $vow[3] . $const[4];
 $_SESSION['checkcode'] = $string = substr($radomstring,0,4); //only display 4 str
 / t up image, the first number is the width and the second is the height
 $imageX = strlen($radomstring)*5.5; //the image width
 $imageY = 20;      //the image height
 $im = imagecreatetruecolor($imageX,$imageY);

 //creates two variables to store color
 $background = imagecolorallocate($im, rand(180, 250), rand(180, 250), rand(180, 250));
 $foregroundArr = array(imagecolorallocate($im, rand(0, 20), rand(0, 20), rand(0, 20)),
         imagecolorallocate($im, rand(0, 20), rand(0, 10), rand(245, 255)),
         imagecolorallocate($im, rand(245, 255), rand(0, 20), rand(0, 10)),
         imagecolorallocate($im, rand(245, 255), rand(0, 20), rand(245, 255)));
 $foreground2 = imagecolorallocatealpha($im, rand(20, 100), rand(20, 100), rand(20, 100),80);  
 $middleground = imagecolorallocate($im, rand(200, 160), rand(200, 160), rand(200, 160));
 $middleground2 = imagecolorallocatealpha($im, rand(180, 140), rand(180, 140), rand(180, 140),80);

 //fill image with bgcolor
 imagefill($im, 0, 0, imagecolorallocate($im, 250, 253, 254));
 //writes string
 imagestring($im, 5, 3, floor(rand(0,5))-1, $string[0], $foregroundArr[rand(0,3)]);
 imagestring($im, 5, 13, floor(rand(0,5))-1, $string[1], $foregroundArr[rand(0,3)]);
 imagestring($im, 5, 23, floor(rand(0,5))-1, $string[2], $foregroundArr[rand(0,3)]);
 imagestring($im, 5, 33, floor(rand(0,5))-1, $string[3], $foregroundArr[rand(0,3)]);
 for($i=0; $i<strlen($string); $i++)
 {
  if(mt_rand(0,ord(substr($string,$i,1)))%2 == 0)
  {
   $string{$i} = ' ';
  }
 }
 imagestring($im, 2, 2, 0, $string, $foreground2);
 //strikethrough

 $border = imagecolorallocate($im, 133, 153, 193);
 //imagefilledrectangle($aimg, 0, 0, $x_size - 1, $y_size - 1, $back);
 imagerectangle($im, 0, 0, $imageX - 1, $imageY - 1, $border);

 $pointcol = imagecolorallocate($im, rand(0,255), rand(0,255), rand(0,255));
 for ($i=0;$i<20;$i++)
 {
  imagesetpixel($im,rand(2,$imageX-2),rand(2,$imageX-2),$pointcol);
 }
 //rotate

 $middleground = imagecolorallocatealpha($im, rand(160, 200), rand(160, 200), rand(160, 200), 80);
 //random shapes
 for ($x=0; $x<15;$x++)
 {
  if(mt_rand(0,$x)%2==0)
  {
   imageline($im, rand(0, 120), rand(0, 120), rand(0, 120), rand(0, 120), $middleground);
   imageellipse($im, rand(0, 120), rand(0, 120), rand(0, 120), rand(0, 120), $middleground2);
  }
  else
  {
   imageline($im, rand(0, 120), rand(0, 120), rand(0, 120), rand(0, 120), $middleground2);
   imageellipse($im, rand(0, 120), rand(0, 120), rand(0, 120), rand(0, 120), $middleground);
  }
 }
 //output to browser
    header("content-type:image/png\r\n");
 imagepng($im);
 imagedestroy($im);
?>

php截屏代码

<?php
$browser = new COM("InternetExplorer.Application");
$handle = $browser->HWND;
$browser->Visible = true;
$browser->Navigate("http://www.111cn.net");

/* Still working? */
while ($browser->Busy) {
    com_message_pump(4000);
}
$im = imagegrabwindow($handle, 0);
$browser->Quit();
imagepng($im, "iesnap.png");
?>


<?
/**
* 生成缩略图
* $srcName----为原图片路径
* $newWidth,$newHeight----分别缩略图的最大宽,高
* $newName----为缩略图文件名(含路径),默认为加入thumbnail
* @param string $srcName
* @param int $newWidth
* @param int $newHeight
* @param string $newName
* return viod
*/
function resizeImg($srcName,$newWidth,$newHeight,$newName=""
)
{
        if(
$newName==""
)
        {
                
$nameArr=explode('.',$srcName
);
                
$expName=array_pop($nameArr
);
                
$expName='thumbnail.'.$expName
;
                
array_push($nameArr,$expName
);
                
$newName implode('.',$nameArr
);
        }
        
$info ""
;
        
$data getimagesize($srcName,$info
);
        switch (
$data[2
])
        {
                case 
1
:
                        if(!
function_exists("imagecreatefromgif"
)){
                                echo 
"你的GD库不能使用GIF格式的图片,请使用Jpeg或PNG格式!返回"
;
                                exit();
                        }
                        
$im ImageCreateFromGIF($srcName
);
                        break;
                case 
2
:
                        if(!
function_exists("imagecreatefromjpeg"
)){
                                echo 
"你的GD库不能使用jpeg格式的图片,请使用其它格式的图片!返回"
;
                                exit();
                        }
                        
$im ImageCreateFromJpeg($srcName
);
                        break;
                case 
3
:
                        
$im ImageCreateFromPNG($srcName
);
                        break;
        }
        
$srcW=ImageSX($im
);
        
$srcH=ImageSY($im
);
        
$newWidthH=$newWidth/$newHeight
;
        
$srcWH=$srcW/$srcH
;
        if(
$newWidthH<=$srcWH
){
                
$ftoW=$newWidth
;
                
$ftoH=$ftoW*($srcH/$srcW
);
        }
        else{
                
$ftoH=$newHeight
;
                
$ftoW=$ftoH*($srcW/$srcH
);
        }
        if(
$srcW>$newWidth||$srcH>$newHeight
)
        {
                if(
function_exists("imagecreatetruecolor"
))
                {
                        @
$ni ImageCreateTrueColor($ftoW,$ftoH
);
                        if(
$niImageCopyResampled($ni,$im,0,0,0,0,$ftoW,$ftoH,$srcW,$srcH
);
                        else
                        {
                                
$ni=ImageCreate($ftoW,$ftoH
);
                                
ImageCopyResized($ni,$im,0,0,0,0,$ftoW,$ftoH,$srcW,$srcH
);
                        }
                }
                else
                {
                        
$ni=ImageCreate($ftoW,$ftoH
);
                        
ImageCopyResized($ni,$im,0,0,0,0,$ftoW,$ftoH,$srcW,$srcH
);
                }
                if(
function_exists('imagejpeg')) ImageJpeg($ni,$newName
);
                else 
ImagePNG($ni,$newName
);
                
ImageDestroy($ni
);
        }
        
ImageDestroy($im
);
}

resizeImg('123.JPG',150,150
);
?>


php+mysql 图象输入输出


我看了网上的例子~用了~发现图片进数据库没问题~但是关于输出部分总是报错~
代码如下
建库:
CREATE TABLE Images ( PicNum int NOT NULL AUTO_INCREMENT PRIMARY KEY, Image BLOB );
进库:<?php
     $Picture=$_POST[file];   //flie是 我那个图片上传页的表单的传递
         If($Picture != "none")
         { $PSize = filesize($Picture);
         $mysqlPicture = addslashes(fread(fopen($Picture, "r"), $PSize));
         mysql_connect("localhost","root","") or die("Unable to connect to SQL server");
         @mysql_select_db("mymg") or die("Unable to select database");
         mysql_query("INSERT INTO images (image) VALUES ('$mysqlPicture')") or die("Cant Perform Query"); }
         else
         { echo"You did not upload any picture"; }
         ?>
程序到这里都没问题~我用CMD看了下 数据库里也有东西.
输出:
<html>
<body>
<?php
mysql_connect($host,$username,$password) or die("Unable to connect to SQL server");
@mysql_select_db($db) or die("Unable to select database");
$result=mysql_query("SELECT * FROM Images") or die("Cant Perform Query");
While($row=mysql_fetch_object($result))
                { echo "<IMG SRC='Second.php ? PicNum=$row- > PicNum'/>"};!                 ?>
                 </body>
                 </html>
'Second.php:
          <?php
$result=mysql_query("SELECT * FROM Images WHERE PicNum=$PicNum") or die("Cant perform Query");
$row=mysql_fetch_object($result);
Header( "Content-type: image/gif");
echo $row->image;
?>
标签:[!--infotagslink--]

您可能感兴趣的文章: