本文实例讲述了PHP生成图像验证码的方法。分享给大家供大家参考,具体如下:
1、生成加法运算验证码图片
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
session_start ();
/*定义头文件为图片*/
header(
"Content-type: image/png"
);
/*生成验证码*/
/*创建图片设置字体颜色*/
$im
= imagecreate(
$w
,
$h
);
$red
= imagecolorallocate(
$im
, 255, 255, 255);
$white
= imagecolorallocate(
$im
, 255, 255, 255);
/*随机生成两个数字*/
$num1
= rand(1, 20);
$num2
= rand(1, 20);
$_SESSION
[
"administratorConfirmCode"
] =
$num1
+
$num2
;
/*设置图片背景颜色*/
$gray
= imagecolorallocate(
$im
, 118, 151, 199);
$black
= imagecolorallocate(
$im
, mt_rand(0, 100), mt_rand(0, 100), mt_rand(0, 100));
/*创建图片背景*/
imagefilledrectangle(
$im
, 0, 0, 100, 24,
$black
);
/*在画布上随机生成大量点*/
for
(
$i
= 0;
$i
< 80;
$i
++) {
imagesetpixel(
$im
, rand(0,
$w
), rand(0,
$h
),
$gray
);
}
/*将计算验证码写入到图片中*/
imagestring(
$im
, 5, 5, 4,
$num1
,
$red
);
imagestring(
$im
, 5, 30, 3,
"+"
,
$red
);
imagestring(
$im
, 5, 45, 4,
$num2
,
$red
);
imagestring(
$im
, 5, 70, 3,
"="
,
$red
);
imagestring(
$im
, 5, 80, 2,
"?"
,
$white
);
/*输出图片*/
imagepng(
$im
);
imagedestroy(
$im
);
|
2、生成字符验证码图片【值得注意的是在字体哪里,需要引入实际的字体路径,否则,可能出现图像显示不了验证码】
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
|
session_start ();
/*设置文件头为图片输出*/
Header(
"Content-type: image/JPEG"
);
/*调用生成验证码函数*/
$str
=
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz01234565789"
;
$result
=
""
;
for
(
$i
=0;
$i
<
$length
;
$i
++){
$num
[
$i
]=rand(0,61);
$result
.=
$str
[
$num
[
$i
]];
}
$text
=
$result
;
$_SESSION
[
"administratorConfirmCode"
] =
$text
;
/*设置图片的宽度和高度*/
$im_x
=
$w
;
$im_y
=
$y
;
/*创建图片*/
$im
= imagecreatetruecolor(
$im_x
,
$im_y
);
$text_c
= ImageColorAllocate(
$im
, mt_rand(0,100),mt_rand(0,100),mt_rand(0,100));
$tmpC0
=mt_rand(100,255);
$tmpC1
=mt_rand(100,255);
$tmpC2
=mt_rand(100,255);
$buttum_c
= ImageColorAllocate(
$im
,
$tmpC0
,
$tmpC1
,
$tmpC2
);
imagefill(
$im
, 16, 13,
$buttum_c
);
/*字体文件*/
$font
= _WEB_DIR_.
'/font/comic.ttf'
;
for
(
$i
=0;
$i
<
strlen
(
$text
);
$i
++){
$tmp
=
substr
(
$text
,
$i
,1);
$array
=
array
(-1,1);
$p
=
array_rand
(
$array
);
$an
=
$array
[
$p
]*mt_rand(1,10);
//角度
$size
= 28;
imagettftext(
$im
,
$size
,
$an
, 15+
$i
*
$size
, 35,
$text_c
,
$font
,
$tmp
);
}
/*将字符写入文件中*/
$distortion_im
= imagecreatetruecolor (
$im_x
,
$im_y
);
imagefill(
$distortion_im
, 16, 13,
$buttum_c
);
for
(
$i
=0;
$i
<
$im_x
;
$i
++) {
for
(
$j
=0;
$j
<
$im_y
;
$j
++) {
$rgb
= imagecolorat(
$im
,
$i
,
$j
);
if
( (int)(
$i
+20+sin(
$j
/
$im_y
*2*M_PI)*10) <= imagesx(
$distortion_im
)&& (int)(
$i
+20+sin(
$j
/
$im_y
*2*M_PI)*10) >=0 ) {
imagesetpixel (
$distortion_im
, (int)(
$i
+10+sin(
$j
/
$im_y
*2*M_PI-M_PI*0.1)*4) ,
$j
,
$rgb
);
}
}
}
/*干扰元素点的数量*/
$count
= 160;
/*创建干扰元素点*/
for
(
$i
=0;
$i
<
$count
;
$i
++){
$randcolor
= ImageColorallocate(
$distortion_im
,mt_rand(0,255),mt_rand(0,255),mt_rand(0,255));
imagesetpixel(
$distortion_im
, mt_rand()%
$im_x
, mt_rand()%
$im_y
,
$randcolor
);
}
/*创建干扰线条*/
$rand
= mt_rand(5,30);
$rand1
= mt_rand(15,25);
$rand2
= mt_rand(5,10);
for
(
$yy
=
$rand
;
$yy
<=+
$rand
+2;
$yy
++){
for
(
$px
=-80;
$px
<=80;
$px
=
$px
+0.1){
$x
=
$px
/
$rand1
;
if
(
$x
!=0){
$y
=sin(
$x
);
}
$py
=
$y
*
$rand2
;
imagesetpixel(
$distortion_im
,
$px
+80,
$py
+
$yy
,
$text_c
);
}
}
/*以PNG格式将图像输出到浏览器*/
ImagePNG(
$distortion_im
);
/*销毁图像*/
ImageDestroy(
$distortion_im
);
ImageDestroy(
$im
);
|