PHP使用GD函数库创建验证码+调用

PHP的动态图像处理GD库
什么是GD库
1,就是一套操作动态图像的函数库
为什么使用GD库
1,处理图像情况使用GD库
什么是很使用?
1,验证码自动生成
2,图像的裁剪
3,股票图
4,图像的裁剪,水印

如何操作GD库
1,六脉神剑
2,准备笔纸
3,开始颜色
4,开始绘画
5,结束画面
6,展现画面
7,画面保存
程序当中
1,创建画布
创建一块操作图像的资源
$img=imagecreatetruecolor(300, 300);
2,分配颜色
$red=imagecolorallocate($img,255,0,0);
$green=imagecolorallocate($img,0,255,0);
$blue=imagecolorallocate($img,0,0,255);
$pink=imagecolorallocate($img,230,11,153);
3,操作图像
imagefilledrectangle($img,0,0,300,300,$red);
4,通知浏览器以图像的形式展现
header("content-type: image/png; charset=utf-8");
5,显示图片
imagepng($img);
6,回收画布资源
imagedestroy($img);
安装GD库
1,检测php/ext目录下是否拥有php_gd2.dll文件
2,需要在php.ini文件中将该扩展包开启
1,Extension=php_gd2.dll

2, 检测是否开启成功phpinfo();

使用GD创建二维码:

<?php
//验证码开始
function code($type=2,$length=4,$width=100,$height=50){
/*
$type=2;  //0,纯数字 1,纯字母 3,数字加字母
$length=4; //验证码长度为4
$width=100;
$height=50;
*/
//1.创建画布
$img=imagecreatetruecolor($width,$height);
//2,分配颜色
function sys($img){
	return imagecolorallocate($img, mt_rand(1,120), mt_rand(0,120), mt_rand(0,120));
}
function qys($img){
	return imagecolorallocate($img, mt_rand(120,255), mt_rand(120,255), mt_rand(120,255));
}
//3,操作图像
//3.1 先将画布填充为浅颜色
imagefilledrectangle($img,0,0,$width,$height,qys($img));
//3.2 准备开始随机字符串
	switch($type){
		case 0: //纯数字
			$str=join("",array_rand(range(1,9),$length));
			break;
		case 1: //纯字母
			$str=array_merge(range('a','z'),range('A','Z'));
			shuffle($str);
			$str=join(array_rand(array_flip($str),$length));
			var_dump($str);
			break;
		case 2: //字母加数字
			$str=array_merge(range('a','z'),range('A','Z'));
			$str=array_flip($str);
			$str=array_merge($str,range(0,9));
			$str=join(array_rand($str,$length));
			break;
	}
//3.3 添加干扰素
	for($i=0;$i<100;$i++){
		imagesetpixel($img,mt_rand(0,$width), mt_rand(0,$height), sys($img));
	}
//3.4 添加横线干扰素
	for($i=0;$i<3;$i++){
		imageline($img,mt_rand(0,$width),mt_rand(0,$height),mt_rand(0,$width),mt_rand(0,$height),sys($img));
	}
//4,通知浏览器
header("content-type: image/png; charset=utf-8");
//5,显示图片
// imagestring($img, 5, 20, 10, $str, $green);
for($i=0;$i<$length;$i++){
	imagettftext($img,17,mt_rand(-45,45),mt_rand(($width/$length)*$i+5,($width/$length)*($i+1)-10),mt_rand(15,$height-10),sys($img),'./font/msyhbd.ttf',$str[$i]);
//array imagettftext ( resource $image , float $size , float $angle , int $x , int $y , int $color , string $fontfile , string $text )
}
imagepng($img);
//6,回收资源
imagedestroy($img);
return $str;
}
以上生成完毕,开始测试

5.php

<?php 
echo "<h1>验证码测试</h1>";
 ?>
 <!DOCTYPE html>
 <html lang="en">
 <head>
 	<meta charset="UTF-8">
 	<title>登录</title>
 	<script>
 		function show(obj){
 			obj.src="./6.php?rand="+Math.random();
 		}
 	</script>
 </head>
 <body>
 	<form action="7.php" method="post">
		姓名<input type="text" name="username">
		密码<input type="text" name="password">
		vcode <input type="text" name="vcode" size="4" maxlength="4" />
		<img src="6.php" alt="" οnclick="show(this)"><br/>
		<input type="submit" value="提交">
 	</form>
 </body>
 </html>
6.php   4.php文件是func文件

<?php 
session_start();
include "./4.php";
$_SESSION['vcode']=code();
var_dump($_SESSION['vcode']);
 ?>

7.php

<?php
session_start(); 
header("content-type:text/heml; charset=utf-8");
$username=$_POST['username'];
$password=$_POST['password'];
$vcodes=$_SESSION['vcode'];
var_dump($_SESSION['vcode']);
$vcode=$_POST['vcode'];
if($vcodes==$vcode){
	echo "true";
	echo "原验证码".$vcode."生成验证码".$vcodes;
 	}else{
 	echo "flase";
 	echo "原验证码".$vcode."生成验证码".$vcodes;
 }
思路:将code()的值存储到SESSION中,
$_SESSION['vcode']=code();
然后对比:

$vcodes=$_SESSION['vcode'];
var_dump($_SESSION['vcode']);
$vcode=$_POST['vcode'];
if($vcodes==$vcode)
结束!


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值