本文实例讲述了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程序设计有所帮助。