图像验证码制作

//生成随机字符串
$arr1=range('a','z');
$arr2=range('A','Z');
$arr3=range('0','9');
$arr_all=array_merge($arr1,$arr2,$arr3);
//打乱数组内元素顺序
shuffle($arr_all);
$arr_key=array_rand($arr_all,4);
$str="";
foreach($arr_key as $value){
    $str.=$arr_all[$value];
}
//创建画布
$img_w=300;
$img_h=150;
$img=imagecreatetruecolor($img_w,$img_h);
//设置可变颜色
//设置整体背景色使用
$color1=imagecolorallocate($img,rand(50,200),rand(50,200),rand(50,200));
//设置字符串颜色使用
$color2=imagecolorallocate($img,rand(50,200),rand(50,200),rand(50,200));
//设置背景
//1、设置随机背景色
imagefilledrectangle($img,0,0,$img_w,$img_h,$color1);

//向图像写入随机字符串
//此处写入字符串可以使字符串在像素点和线条的后边
imagettftext($img,60,0,50,100,$color2,'./font/ygy.ttf',$str);

//2、设置随机色像素点
for($i=0;$i<1000;$i++){
    $color3=imagecolorallocate($img,rand(0,255),rand(0,255),rand(0,255));
    imagesetpixel($img,rand(0,$img_w),rand(0,$img_h),$color3);
}
//3、设置随机线条
for($i=0;$i<50;$i++){
    $color4=imagecolorallocate($img,rand(0,255),rand(0,255),rand(0,255));
    imageline($img,rand(0,$img_w),rand(0,$img_h),rand(0,$img_w),rand(0,$img_h),$color4);
}
//声明网页内容类型为图像
header("content-type:image/png");
//输出图像
imagepng($img);
//关闭图像释放资源
imagedestroy($img);
结果如下:
图片.png
图片.png

相关函数详解:

1、产生一个指定范围的数组range()

1)描述:建立一个包含指定范围单元的数组
2)语法:array range ( mixed start,mixedstart , mixedstart,mixedlimit [, number 公式输入有误start 指定范围第1个值;
b、公式输入有误step 指定步长值,必须为正整数,默认为1。



2、合并数组array_merge()

1)描述:合并一个或多个数组
2)语法:array array_merge ( array array1[,arrayarray1 [, arrayarray1[,array... ] )
3)说明:如果输入的数组中有相同的字符串键名,则该键名后面的值将覆盖前一个值。然而,如果数组包含数字键名,后面的值将不会覆盖原来的值,而是附加到后面。


3、从数组中随机取出一个或多个单元

1)描述:从数组中随机取出一个或多个单元
2)语法:mixed array_rand ( array input[,intinput [, intinput[,intnum_req = 1 ] )
3)参数:公式输入有误num_req指明了你想取出多少个单元。
4)返回值:如果只取出一个,array_rand()返回一个随机单元的键名,否则就返回一个包含随机键名的数组。


4、生成更好的随机数

1)描述:生成更好的随机数
2)语法:int mt_rand ( int min,intmin , intmin,intmax )
3)参数:min可选的、返回的最小值(默认:0);max可选的、返回的最大值。

猜你喜欢

转载自blog.csdn.net/csdn_heshangzhou/article/details/80906380