拓展
我们需要开启gd拓展,可以使用下面的代码来查看是否开启gd拓展。
echo phpinfo();
?>
然后在浏览器上Ctrl+F查找gd选项即可验证自己有没有装这个拓展,如果没有的话,还需要自己全装一下这个拓展。
背景图
imagecreatetruecolor
默认生成黑色背景
imagepng($image);
// 释放资源,销毁执行对象
imagedestroy($image);
imagecolorallocate
创建一个填充色,并用imagefill(image,x,y,color)方法来附着。
// 生成填充色
$bgcolor = imagecolorallocate($image,255,255);
// 将填充色填充到背景图上
imagefill($image,$bgcolor);
// 在显示这张图片的时候一定要先声明头信息
header('content-type:image/png');
imagepng($image);
// 释放资源,销毁执行对象
imagedestroy($image);
imagepng
在使用这个方法之前,一定要先设置头信息,否则不会正常的显示图片
imagedestory(image)
适时的释放资源会减轻对服务器请求的压力。
简易数字验证码
imagecolorallocate
生成颜色信息,方便待会的赋予处理。
imagestring
// 生成一些干扰的点,这里是200个 // 增加线 // 生成一些干扰线 这里是5个 } // 生成填充色 //////// 生成随机4位字母以及数字混合的验证码 // 生成一些干扰的点,这里是200个 } header('content-type:image/png'); imagepng($image); // 释放资源,销毁执行对象 开启session的时机 注意: 开启session一定要在开始的地方
验证的原理 验证的过程就是客户端输入的验证码和存在于session域中的验证码进行对比。即: 优化验证 但是简单的这样验证有一点不好的地方,那就是字母的大小写容易出错。所以我们要做一下转换,将用户输入的数值全部变成小写的。
生成验证码 // 使用gd的imagecreatetruecolor();创建一张背景图 //////// 生成随机4位字母以及数字混合的验证码 // 生成一些干扰的点,这里是200个 } header('content-type:image/png'); imagepng($image); // 释放资源,销毁执行对象 表单验证 最后,来个总结吧。
•使用PHP制作验证码需要gd拓展的支持。
•使用imagecreatetruecolor方法生成背景色,并用imagefill填充一个由imagecolorallocate产生的颜色。
•使用imagestring来实现验证码和背景图的结合
•使用imagesetpixel来添加干扰点
•使用imageline来添加干扰线
•使用session之前要在开头开启session_start()方法
•使用JavaScript来动态的修改验证码的src,来满足用户“换一张”的需求。
增加识别干扰
for($i=0;$i<200;$i++){
$pointcolor = imagecolorallocate($image,rand(50,255));
imagesetpixel($image,100),30),$pointcolor);
}
for($i=0;$i<5;$i++){
// 设置为浅色的线,防止喧宾夺主
$linecolor = imagecolorallocate($image,255));
imageline($image,99),29),$linecolor);数字字母混合验证码
$bgcolor = imagecolorallocate($image,$bgcolor);
for($i=0;$i<4;$i++){
$fontsize = rand(6,8);
$fontcolor = imagecolorallocate($image,255));
// 为了避免用户难于辨认,去掉了某些有歧义的字母和数字
$rawstr = 'abcdefghjkmnopqrstuvwxyz23456789ABCDEFGHJKLMNOPQRSTUVWXYZ';
$fontcontent = substr($rawstr,strlen($rawstr)),1);
// 避免生成的图片重叠
$x += 20;
$y = rand(10,20);
imagestring($image,$fontcolor);
}
for($i=0;$i<200;$i++){
$pointcolor = imagecolorallocate($image,$pointcolor);
}
// 生成一些干扰线 这里是4个
for($i=0;$i<4;$i++){
// 设置为浅色的线,防止喧宾夺主
$linecolor = imagecolorallocate($image,$linecolor);
imagedestroy($image);使用验证码
小案例
$image = imagecreatetruecolor(100,$bgcolor);
$checkcode='';
for($i=0;$i<4;$i++){
$fontsize = rand(6,255));
// 为了避免用户难于辨认,去掉了某些有歧义的字母和数字
$rawstr = 'abcdefghjkmnopqrstuvwxyz23456789';
$fontcontent = substr($rawstr,1);
// 拼接即将诞生的验证码
$checkcode.=$fontcontent;
// 避免生成的图片重叠
$x += 20;
$y = rand(10,$fontcolor);
}
// 保存到session变量中
$_SESSION['checkcode']=$checkcode;
for($i=0;$i<200;$i++){
$pointcolor = imagecolorallocate($image,$linecolor);
imagedestroy($image);总结
猜你在找的PHP相关文章