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
转载随意,但请附上文章地址:-)