• 封装captcha类 -- 画图四


    <?php
        
        // 验证码类
        class Captcha{
            //属性
            private $width;
            private $height;
            private $length;
            private $lines;
            private $pixels;
            private $color;
            private $font;
            private $string;
            /*
             *构造方法
             *@param1 array $arr, 一个数组, 里面几乎包含了所有的属性
             *
             */
            public function __construct($arr = array()) {
                $this->width = isset($arr['width']) ? $arr['width'] : 146;
                $this->height = isset($arr['height']) ? $arr['height'] : 20;
                $this->length = isset($arr['length']) ? $arr['length'] : 4;
                $this->lines = isset($arr['lines']) ? $arr['lines'] : 5;
                $this->pixels = isset($arr['pixels']) ? $arr['pixels'] : 200;
                $this->font = isset($arr['font']) ? $arr['font'] : 5;
                // 背景色
                $this->color['bg_min'] = isset($arr['bg_min']) ? $arr['bg_min'] : 200;
                $this->color['bg_max'] = isset($arr['bg_max']) ? $arr['bg_max'] : 255;
                // 字体颜色
                $this->color['font_min'] = isset($arr['font_min']) ? $arr['font_min'] : 0;
                $this->color['font_max'] = isset($arr['font_max']) ? $arr['font_max'] : 100;
                // 线颜色
                $this->color['line_min'] = isset($arr['line_min']) ? $arr['line_min'] : 100;
                $this->color['line_max'] = isset($arr['line_max']) ? $arr['line_max'] : 150;
                // 像素颜色
                $this->color['pixels_min'] = isset($arr['pixels_min']) ? $arr['pixels_min'] : 150;
                $this->color['pixels_max'] = isset($arr['pixels_max']) ? $arr['pixels_max'] : 200;
                // 字符串
                $this->string = isset($arr['string']) ? $arr['string'] : 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ123456789';
    
            }
    
            /*
             *获得验证码图片
             *
             */
            public function generate() {
    
                //1. 创建画布
                $im = imagecreatetruecolor($this->width, $this->height);    
    
                //2. 背景顏色
                //2.1分配顏色
                $bg_color = imagecolorallocate($im, mt_rand($this->color['bg_min'], $this->color['bg_max']), mt_rand($this->color['bg_min'], $this->color['bg_max']), mt_rand($this->color['bg_min'], $this->color['bg_max'])); 
    
                //2.2背景填充
                imagefill($im, 0, 0, $bg_color);
    
                // 3.获取验证码
                $captcha = $this->getCaptchaStr();
    
                // var_dump($captcha); exit;
    
                // 4.分配颜色
                $str_color = imagecolorallocate($im, mt_rand($this->color['font_min'], $this->color['font_max']), mt_rand($this->color['font_min'], $this->color['font_max']), mt_rand($this->color['font_min'], $this->color['font_max']));
    
                //5. 将验证码写入到图片
                imagestring($im, $this->font, ceil($this->width / 2) - 20, ceil($this->height / 2) - 10, $captcha, $str_color);
    
                // 6. 增加干扰线
                for( $i = 0; $i < $this->lines; $i++ ){
                    // 分配颜色
                    $line_color = imagecolorallocate($im, mt_rand($this->color['line_min'], $this->color['line_max']), mt_rand($this->color['line_min'], $this->color['line_max']), mt_rand($this->color['line_min'], $this->color['line_max']));
                    // 写入线段
                    imageline($im, mt_rand(0, $this->width), mt_rand(0, $this->height), mt_rand(0, $this->width), mt_rand(0, $this->height), $line_color);
                }
    
               // 7. 增加干扰点
               for( $i = 0; $i < $this->pixels; $i++ ){
                    $pixels_color = imagecolorallocate($im, mt_rand($this->color['pixels_min'], $this->color['pixels_max']), mt_rand($this->color['pixels_min'], $this->color['pixels_max']), mt_rand($this->color['pixels_min'], $this->color['pixels_max']));
                    // 写入线段
                    imagesetpixel($im, mt_rand(0, $this->width), mt_rand(0, $this->height), $pixels_color);
    
                }
    
                // 8. 保存输出
                imagepng($im);
                // imagepng($im, 'captcha.png');
                
                // 9. 释放资源
                imagedestroy($im);
    
            }
    
            /*
             *获得验证码字符串
             *
            */
            private function getCaptchaStr() {
                 // 定義變量保存字符串
                 $captchaStr = '';
                 // for( $i = 0; $i < $this.length; $i++ ){ //傻逼写法
                 for( $i = 0; $i < $this->length; $i++ ){
                     // 获取随机字符串
                     $captchaStr .= $this->string[mt_rand(0, strlen($this->string) - 1)];
                 }
    
                 // 将随机字符串存放在session中
                 $_SESSION['captcha'] = $captchaStr;
    
                 return $captchaStr;
            }
    
        }
    
        $captcha  = new Captcha();
    
        // header('content-type: image/php');
        header('content-type: image/png');
        $captcha->generate();
  • 相关阅读:
    代码守恒定律
    第一个Dockerfile
    服务器项目白名单设置
    TOMCAT禁用不安全请求方式
    标准单例模式
    二进制,八进制,十进制,十六进制!!!!
    JAVA按层级遍历二叉树
    String的+
    安装 Rational Rose 启动报错:无法启动此程序,因为计算机中丢失 suite objects.dll
    java中文乱码问题
  • 原文地址:https://www.cnblogs.com/zsongs/p/6105502.html
Copyright © 2020-2023  润新知