本文实例讲述了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 ); |
希望本文所述对大家PHP程序设计有所帮助。