• 验证码绘制


    验证码绘制

    1.产生验证码字符串

    ​ 使用ASCII码和sprintf函数生成验证码字符串

    ​ ASCII码对应字符如下:

    ​ 数字:48-57

    ​ 小写字母:97-122

    ​ 大写字母:65-90

    sprintf('%c',ASCII);  //将ASCII码转为对应字符

    2.绘制验证码

    ​ 绘制步骤:

    ​ (1)创建画布

    ​ (2)创建画笔

    ​ (3)填充背景色

    ​ (4)绘制验证码

    ​ (5)显示图片

    ​ (6)销毁图片资源

    3.实例

    <?php
    header('Content-Type:image/png');
    //echo sprintf('%c', 67);
    
    //1. 产生验证码字符串
    $code = '';
    //每次循环随机产生一个字符,拼接到$code中
    for($i = 0; $i < 4; $i++){
        $tmp = rand(1,3);
        switch ($tmp){
            case 1:
                //随机产生一个0-9之间的数字,拼接到$code中
                $code .= sprintf('%c', rand(48, 57));
                break;
            case 2:
                //随机产生一个A-Z之间的字符,拼接到$code中
                $code .= sprintf('%c', rand(65, 90));
                break;
            case 3:
                //随机产生一个a-z之间的字符,拼接到$code中
                $code .= sprintf('%c', rand(97, 122));
                break;
        }
    }
    //开启session
    //session_start();
    //将验证码存入session
    //$_SESSION['code'] = $code;
    
    
    //2. 绘制验证码
    //① 创建画布
    $img = imagecreatetruecolor(90, 30);//参数:画布宽、高
    //② 创建画笔
    $red = imagecolorallocate($img, 255, 0, 0);//参数:画布资源和RGB色值
    $green = imagecolorallocate($img, 0, 255, 0);
    $blue = imagecolorallocate($img, 0, 0, 255);
    $white = imagecolorallocate($img, 255, 255, 255);
    $black = imagecolorallocate($img, 0, 0, 0);
    $tmp = imagecolorallocate($img, 128, 128, 128);
    $arr = array($red, $green, $blue, $white, $black);
    //③ 填充背景色
    imagefill($img, 0, 0, $tmp);
    //④ 绘制验证码
    for($i = 0; $i < 4; $i++){
            imagettftext(
            $img,    //画布资源
            rand(15, 20),   //字体大小
            rand(-30, 30),  //倾斜角度
            10 + 18 * $i,   //绘制文字的起始X坐标点
            20,             //绘制文字的起始Y坐标点
            $arr[rand(0,4)],//绘制文字的颜色
            'SIMSUN.TTC',   //字体文件路径
            $code[$i]       //绘制的字符串
        );
    }
    
    //⑤ 显示图片
    imagepng($img);
    //⑥ 销毁图片资源
    imagedestroy($img);

    效果图:

    这里写图片描述

  • 相关阅读:
    【Manacher(马拉车)算法】
    【可持久化数据结构】
    react-dva修改默认端口的方法
    关于React Hooks使用
    react hook useContext 跨文件接收
    el-select中使用el-tooltip时,在下拉滚动时整个网页会出现滚动条,并抖动
    react的onClick执行函数和bind(this)问题
    禁用h5页面中长按图片弹出的弹层
    JS树结构操作:查找、遍历、筛选、树结构和列表结构相互转换
    js树结构查找节点
  • 原文地址:https://www.cnblogs.com/Jianxq12/p/7684308.html
Copyright © 2020-2023  润新知