有一些点需要注意:
1,创建画布,imagecreatetruecolor()
配置颜色,imagecolorallocate()
2,用矩形填充画布,imagefilledrectangle()
3,把TrueType文本写入图像,imagettftext()
4,添加干扰点,imagesetpixel()
5, 添加干扰线,imageline()
6, header("Content-type:image/gif");
imagegif($image);
imagedestroy($image);//销毁资源
7,join()把数组转化为字符串,range()是范围数组
8,array_merge()把很多数组合并为一个数组
9,str_shuffle()打乱字符串
10,substr()截取字符串
验证码应该分成两部分去想,一部分是图像,一部分是文本,图像是根据gd库中的函数来完成,画布,颜色,
填充,干扰线,干扰点等,比较重要的一点是用imagettftext()把文本写入图像,文本是通过自定义随机
字符串函数获得,随机函数能够支持纯数字、大小写混合随机产生。把验证码操作封装成函数,调用即可,
调用时最好新开一个PHP文件。
代码如下:
image.php页面(需要调用string.php中产生随机字符串的函数)
?php
//通过GD库做验证码
function verifyImage($type=1,$length=4,$pixel=0,$line=0,$sess_name="verify"){
//创建画布
require_once'string.func.php';
$width = 80;
$height = 28;
$image = imagecreatetruecolor($width,$height);//画布
$white = imagecolorallocate($image,255,255,255);//白色
//用矩形填充画布
imagefilledrectangle($image,1,1,$width-2,$height-2,$white);
$chars = buildRandomString($type,$length);//调用函数产生随机字符串
$_SESSION[$sess_name] = $chars;//把随机字符串写入session,后面验证用户填入的是否正确时会用到
for($i=0;$i<$length;$i++){
$size = mt_rand(14,18);//mt_rand()生成随机数
$angle = mt_rand(-15,15);
$x = 5+$i*$size;
$y = mt_rand(20,26);
$fontfile = "../fonts/SIMYOU.TTF";
$color = imagecolorallocate($image,mt_rand(50,90),mt_rand(80,200),mt_rand(90,180));
$text = substr($chars,$i,1);
imagettftext($image,$size,$angle,$x,$y,$color,$fontfile,$text);//imagettftext()把TrueType文本写入图像
}
for($i=0;$i<$pixel;$i++){
$color = imagecolorallocate($image,mt_rand(50,90),mt_rand(80,200),mt_rand(90,180));
imagesetpixel($image,mt_rand(0,$width-1),mt_rand(0,$height-1),$color);//添加点
}
for($i=0;$i<$line;$i++){
$color = imagecolorallocate($image,mt_rand(50,90),mt_rand(80,200),mt_rand(90,180));
imageline($image,mt_rand(0,$width-1),mt_rand(0,$height-1),mt_rand(0,$width-1),mt_rand(0,$height-1),$color);//添加直线
}
ob_clean(); //清除之前的缓存
header("Content-type:image/gif");
imagegif($image);
imagedestroy($image);//销毁资源
}
string.php页面(产生随机字符串)