admin 发表于 2021-3-5 19:49:10

PHP 生成验证码图片



/**
* 验证码类
*/
class VeriCode
{
    // 获取验证码配置
    private static function _getCodeConfig()
    {
      return [
            // 验证码字符集
            'codeStr' => 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789',
            // 验证码个数
            'codeCount' => 4,
            // 字体大小
            'fontsize' => 25,
            // 验证码的宽度
            'width' => 130,
            // 验证码高度
            'height' => 36,
            // 是否有干扰点?true有,false没有
            'disturbPoint' => false,
            // 干扰点个数,disturbPoint开启后生效
            'pointCount' => 1,
            // 是否有干扰条?true有,false没有
            'disturbLine' => false,
            // 干扰条个数,disturbLine开启后生效
            'lineCount' => 9
      ];
    }

    // 创建图片验证码
    public static function create()
    {
      // 配置
      $config = self::_getCodeConfig();

      //创建画布
      $image = imagecreatetruecolor($config['width'], $config['height']);
      //背景颜色
      $bgcolor = imagecolorallocate($image, 255, 255, 255);
      imagefill($image, 0, 0, $bgcolor);
      $captch_code = '';//存储验证码
      $captchCodeArr = str_split($config['codeStr']);

      //随机选取4个候选字符
      for ($i = 0; $i < $config['codeCount']; $i++) {
            $fontsize = $config['fontsize'];
            $fontcolor = imagecolorallocate($image, rand(0, 120), rand(0, 120), rand(0, 120));//随机颜色
            $fontcontent = $captchCodeArr) - 1)];
            $captch_code .= $fontcontent;
            $_x = $config['width'] / $config['codeCount'];
            $x = ($i * (int)$_x) + rand(5, 10);   //随机坐标
            $y = rand(5, 10);
            imagestring($image, $fontsize, $x, $y, $fontcontent, $fontcolor);    // 水平地画一行字符串

      }

      session_start();
      $_SESSION['code'] = $captch_code;
      //增加干扰点
      if ($config['disturbPoint']) {
            for ($i = 0; $i < $config['pointCount']; $i++) {
                $pointcolor = imagecolorallocate($image, rand(50, 200), rand(50, 200), rand(50, 200));
                imagesetpixel($image, rand(1, 99), rand(1, 29), $pointcolor);

            }
      }

      //增加干扰线
      if ($config['disturbLine']) {
            for ($i = 0; $i < $config['lineCount']; $i++) {
                $linecolor = imagecolorallocate($image, rand(80, 280), rand(80, 220), rand(80, 220));
                imageline($image, rand(1, 99), rand(1, 29), rand(1, 99), rand(1, 29), $linecolor);
            }
      }

      //输出格式
      header('content-type:image/png');
      imagepng($image);

      //销毁图片
      imagedestroy($image);
    }调用


VeriCode::create();

页: [1]
查看完整版本: PHP 生成验证码图片