第十三回、PHP基础教程,PHP生成图片验证码

<?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);