<?session_start();
header(“content-type:image/pjpeg”);
?>//起用Session并标明本页面将输出图片类型为jpeg
一、使用imagestring生成验证码
<?php
$im=imagecreate(160,26);
//生成一个160*26pix的图片
$bgColor=imagecolorallocate($im,255,255,17);
//第一次调用这个函数是设置背景色
$fontColor=imagecolorallocate($im,0,0,0);
//设置文字的颜色
$xxColor=imagecolorallocate($im,0,0,255);
//设置第一个类型杂点的颜色
$xyColor=imagecolorallocate($im,255,0,0);
//设置第二个类型杂点的颜色
$i=0;
$ch=””;
$_SESSION[“myCode”]=””;
//定义一个Session变量myCode
while($i<4)//生成4个字母
{
$i++;
$ch=$ch.chr(mt_rand(65,91)).” “;
//生成4个字母,并在字母之间加一个空格,并放入变量$ch中
}
$_SESSION[“myCode”]=$ch;
//将变量$ch中的字条串放入Session变量中,以备后台验证时使用
imagestring($im,5,10,4,$ch,$fontColor);
//将字符串以指定的大小、位置和颜色写入图片$im中
$j=mt_rand(20,50);
//生成一个20-50之间的数,即将要生成的杂点数目为20-50个
for($i=$j;
$i<=20;
$i++)//由
{
$myX=mt_rand(1,2);
//生成1和2中的一个数来决定使用哪一个杂点
if($myX==1)
{
imagestring($im,1,mt_rand(0,160),mt_rand(0,26),”.”,$xyColor);
//将杂点以指定的大小、位置和颜色写入图片$im中
}
else
{
imagestring($im,1,mt_rand(0,160),mt_rand(0,27),”~”,$xxColor);
//将杂点以指定的大小、位置和颜色写入图片$im中
}
}
imagejpeg($im);
//将图片输出到浏览器
imagedestroy($im);
//销毁图片
?>
将上述代码保存到php文件中(注意:不要与其它HTML代码汇合使用,要以纯PHP代码保存),在需要引入验证码的页面中用<img>标记符引用之。经试验,将上例中生成4个字母,以及放入SESSION的语句写到引用页中,然后在生成图片的页面中,在需要写入字符的位置用SESSION值写入便可正常使用。否则会出现本次SESSION中的值是上一次生成的字符串,从而使验证出错。
二、使用imagettftext函数生成验证码
$filePath=realpath($url).”\”.$fName;
$image_info=getimagesize($filePath);
$image_h=$image_info[1];
switch($image_info[2])
{
case 1:
$image_im=imagecreatefromgif($filePath);
break;
case 2:
$image_im=imagecreatefromjpeg($filePath);
break;
case 3:
$image_im=imagecreatefrompng($filePath);
break;
default:
echo”<center>文件类型错误</center>”;
$upImage=NULL;
exit;
}
imagealphablending($image_im,true);
$fontFile=”simkai.ttf”;
imagettftext($image_im,24,0,30,$image_h-50,imagecolorallocate($image_im,255,0,0),$fontFile,iconv(“gbk”,”utf-8″,” 商丘一卡通”));
imagettftext($image_im,24,0,30,$image_h-20,imagecolorallocate($image_im,255,0,0),$fontFile,”yikatong.sq0370.cn”);
switch($image_info[2])
{
case 1:
imagegif($image_im,$filePath);
break;
case 2:
imagejpeg($image_im,$filePath);
break;
case 3:
imagepng($image_im,$filePath);
break;
}
imagedestroy($image_im);