PHP(11) 图像型的验证码
在用户登陆程序(版本1)中,咱们曾经提到过验证码主要分为字符型和图像型两种,而字符型又能够分为数字型和混合型两种(这些分类是个人分类,能够存在误差,请多包涵!^_^)。在上两篇博文中,咱们已经将字符型的验证码实现了,此次,咱们再次咱们的程序作一次升级----图像型验证码
若是咱们在PHP中来处理图像的话,那么就必须依赖于GD(Graphics Draw)库,还记得咱们在php.ini中启用过php_gd2.dll吗,启用该文件的目的就是为了来处理图像的!
下面咱们就来了解一下GD函数库吧!
1. p_w_picpath_create和p_w_picpathcreatetruecolor
两个函数的目的是同样的,都是建立一个图像资源,语法结构也
同样的
$变量名称 = p_w_picpathcreate(宽度,高度);
或
$变量名称 = p_w_picpathcreatetruecolor(宽度,高度);
二者惟一的区别在于:前者是基于调色板;后者基于真彩色(推荐使用)
2. p_w_picpathcolorallocate
功能:为图像来分配一个颜色,也就是说这种颜色可能在图像中使用,但具体的是在前景色中使用;仍是在背景色或填充色中使用,并不固定,由用户来决定。
$变量名称 = p_w_picpathcolorallocate($图像资源名称,红色,绿色,蓝色);
3. p_w_picpathfill
功能:区域填充
语法:[$变量名称=]p_w_picpathfill($图像资源名称,x,y,颜色);
须要提醒各位的是:颜色不能够直接来书写,必须使用imagecolorallocate来分配
4. p_w_picpathstring和p_w_picpathttftext
功能均为在图像中书写文本,不过p_w_picpathstring通常用来使用内置字体来书写文本,并且文本不能带有旋转样式,若是想经过p_w_picpathstring+外部字体来书写文本时,那么必须使用p_w_picpathloadfont来加载字体;而p_w_picpathttftext则使用TrueType 字体在图像内书写文本。
[$变量名称=]p_w_picpathstring($图像资源名称,字号,x,y,”内容”,颜色);
[$变量名称=]p_w_picpathttftext($图像资源名称,字号,旋转角度,x,y,颜色,”字体文件”,”内容”);
5. p_w_picpathfilledrectangle、p_w_picpatharc、p_w_picpathline、p_w_picpathsetpixel
p_w_picpathfillledrectangle的功能为绘制填充的矩形
p_w_picpatharc的功能为在图布上绘制圆弧
p_w_picpathline的功能为在画布上绘制线段
p_w_picpathsetpixel的功能为在画布上绘制像素点
6. p_w_picpathgif、p_w_picpathjpeg、p_w_picpathpng
p_w_picpathgif的功能为将图像资源做为gif格式输出到屏幕或生成文件
p_w_picpathjpeg的功能为将图像资源做为jpeg格式输出到屏幕或生成文件
p_w_picpathpng的功能为将图像资源做为png格式输出到屏幕或生成文件
7. p_w_picpathdestroy
p_w_picpathdestroy的功能为销毁图像资源
好了,如今的这几个函数,咱们差很少就都理解了,咱们如今来实现一个简单的案例:
案例1:
$width
= "120";
$height
= "45";
$img
= p_w_picpathcreatetruecolor($width,$height);
$black
= p_w_picpathcolorallocate($img,0,0,0);
$white
= p_w_picpathcolorallocate($img,255,255,255);
p_w_picpathfill(
$img
,
0
,
0
,
$black
);
p_w_picpathfilledrectangle(
$img
,
1
,
1
,
$width
-
2
,
$height
-
2
,
$white
);
$char
= rand(1000,9999);
p_w_picpathstring(
$img
,
5
,
40
,
15
,
$char
,
$black
);
p_w_picpathjpeg(
$img
);
运行效果以下:
案例2:
$width
= "120";
$height
= "45";
$img
= p_w_picpathcreatetruecolor($width,$height);
$black
= p_w_picpathcolorallocate($img,0,0,0);
$white
= p_w_picpathcolorallocate($img,255,255,255);
p_w_picpathfill(
$img
,
0
,
0
,
$black
);
p_w_picpathfilledrectangle(
$img
,
1
,
1
,
$width
-
2
,
$height
-
2
,
$white
);
for
(
$i
=
0
;
$i
<
4
;
$i
++)
{
$x = 40 + $i * 15;
$char = rand(0,9);
$color = p_w_picpathcolorallocate($img,rand(0,255),rand(50,100),rand(50,120));
p_w_picpathstring($img,5,$x,15,$char,$color);
}
p_w_picpathjpeg(
$img
);
运行效果以下:
案例3:
$width
= "120";
$height
= "45";
$img
= p_w_picpathcreatetruecolor($width,$height);
$black
= p_w_picpathcolorallocate($img,0,0,0);
$white
= p_w_picpathcolorallocate($img,255,255,255);
p_w_picpathfill(
$img
,
0
,
0
,
$black
);
p_w_picpathfilledrectangle(
$img
,
1
,
1
,
$width
-
2
,
$height
-
2
,
$white
);
for
(
$i
=
0
;
$i
<
4
;
$i
++)
{
$x = 40 + $i * 15;
$char = rand(0,9);
$fontSize = rand(15,20);
$angle = rand(-20,20);
$y = rand(25,35);
$color = p_w_picpathcolorallocate($img,rand(0,255),rand(50,100),rand(50,120));
p_w_picpathttftext($img,$fontSize,$angle,$x,$y,$color,"PilsenPlakat.ttf",$char);
}
p_w_picpathjpeg(
$img
);
运行效果以下:
案例4:在案例3的基础上添加一些杂点
$width
= "120";
$height
= "45";
$img
= p_w_picpathcreatetruecolor($width,$height);
$black
= p_w_picpathcolorallocate($img,0,0,0);
$white
= p_w_picpathcolorallocate($img,255,255,255);
p_w_picpathfill(
$img
,
0
,
0
,
$black
);
p_w_picpathfilledrectangle(
$img
,
1
,
1
,
$width
-
2
,
$height
-
2
,
$white
);
for
(
$i
=
0
;
$i
<
5
;
$i
++)
{
p_w_picpathline($img,rand(0,$width),rand(0,$height),rand(0,$width),rand(0,$height),$black);
}
for
(
$i
=
0
;
$i
<
50
;
$i
++)
{
p_w_picpathsetpixel($img,rand(0,$width),rand(0,$height),$black);
}
for
(
$i
=
0
;
$i
<
4
;
$i
++)
{
$x = 40 + $i * 15;
$char = rand(0,9);
$fontSize = rand(15,20);
$angle = rand(-20,20);
$y = rand(25,35);
$color = p_w_picpathcolorallocate($img,rand(0,255),rand(50,100),rand(50,120));
p_w_picpathttftext($img,$fontSize,$angle,$x,$y,$color,"PilsenPlakat.ttf",$char);
}
p_w_picpathjpeg(
$img
);
运行效果以下:
好了,先写这些,剩余的明天再补,由于时间太晚了,明天还有课!哈哈!很差意思!各位晚安!!