美文网首页
图像验证码制作

图像验证码制作

作者: 老衲灬 | 来源:发表于2018-07-04 00:25 被阅读4次
    //生成随机字符串
    $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

    相关函数详解:

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

    1)描述:建立一个包含指定范围单元的数组
    2)语法:array range ( mixed $start , mixed $limit [, number $step = 1 ] )
    3)参数:

    a、$start 指定范围第1个值;
    b、$limit 指定范围最后1个值;
    c、$step 指定步长值,必须为正整数,默认为1。
    
    2、合并数组array_merge()

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

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

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

    4、生成更好的随机数

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

    相关文章

      网友评论

          本文标题:图像验证码制作

          本文链接:https://www.haomeiwen.com/subject/rvrsuftx.html