zsongs

封装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();

 

发表于 2016-11-26 22:27  LiuYier  阅读(452)  评论(0编辑  收藏  举报
 

分类:

技术点:

相关文章:

  • 2022-12-23
  • 2021-06-04
  • 2022-12-23
  • 2022-12-23
  • 2022-01-28
  • 2021-11-01
  • 2021-12-31
  • 2021-08-29
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-11-29
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案