PHP碎码——自己写的验证码
admin
2023-06-21 00:00:02
0


其实里面没必要封装函数,只是当时觉得视觉上好看而已,结构清晰点


font_size = ($this->img_height*2/5 > $this->img_height*4/5 ? $this->img_height*4/5 : $this->img_height*2/5);
    }
    
    public function run(){
        //创建图片资源
        $this->createImage();

        //往图片中添加雪花
        $this->addaSterisk();
        //往图片中添加字符
        $this->addfont();
        //往图片中添加线条
        $this->addLine();
        //将图片输出至浏览器
        $this->outputImg();
    }
    //返回验证码字符串
    public function getCode(){
        return $this->codes;
    }
    
    //创建图片资源
    private function createImage(){
        //创建图片资源
        $this->img = p_w_picpathcreatetruecolor($this->img_length,$this->img_height);  
        //创建颜色
        $color_bg = p_w_picpathcolorallocate($this->img, mt_rand(210, 255), mt_rand(210, 255), mt_rand(210, 255));
        //设置图片背景色
        p_w_picpathfill($this->img, 0, 0, $color_bg);
    }
    
    //往图片中添加线条
    private function addLine(){
        //添加指定数量的线条
        for ($i = 0; $i < $this->line_num; $i++) {
            //创建随机颜色--参数(图片资源,R,B,G)
            $color_line = p_w_picpathcolorallocate($this->img, mt_rand(50, 200), mt_rand(50, 200), mt_rand(50, 200));
            
            //添加线条,位置随机--参数(图片资源,起点-x,起点-y,终点-x,终点-y,颜色)
            //不可调整
            //p_w_picpathline($this->img, mt_rand(0, $this->img_length), mt_rand(0, $this->img_height), mt_rand(0, $this->img_length), mt_rand(0, $this->img_height), $color_line);
            //可以调整线条的粗细
            $src_x = mt_rand(0, $this->img_length);
            $src_y = mt_rand(0, $this->img_height);
            $dest_x = mt_rand(0, $this->img_length);
            $dest_y = mt_rand(0, $this->img_height);
            for ($j = 0; $j < 1; $j++) {
                p_w_picpathline($this->img, $src_x+$j, $src_y+$j, $dest_x+$j,$dest_y+$j, $color_line);
            }
        }
    }
    //往图片中添加雪花
    private function addaSterisk(){
        //添加指定数量的雪花
        for ($i = 0; $i < $this->sterisk_num; $i++) {
            //创建随机颜色--参数(图片资源,R,B,G)
            $color_Ster = p_w_picpathcolorallocate($this->img, mt_rand(220, 255), mt_rand(220, 255), mt_rand(220, 255));
            //添加雪花,位置随机--参数(图片资源,倾斜角度,左下角-x,左下角-y,颜色,字符串)
            p_w_picpathstring($this->img,mt_rand(0,360),mt_rand(0,$this->img_length),mt_rand(0,$this->img_height),'*',$color_Ster);
        }
    }
    
    private function addfont(){
        for ($i = 0; $i < $this->code_num; $i++) {
            //随机从字符列表中取一个字符
            $code = substr(str_shuffle($this->charlist),-1);
            //记录到验证码字符串中
            $this->codes .= $code;
            //创建随机颜色--参数(图片资源,R,B,G)
            $color_font = p_w_picpathcolorallocate($this->img, mt_rand(10, 180), mt_rand(10, 180), mt_rand(10, 180));
            //添加雪花,位置随机--参数(图片资源,字体大小,倾斜角度,左下角-x,左下角-y,字体颜色,字体,字符串)
            // 左下角-y,字体的基准高度是估计的,由于字体大小使用磅,不同字符的长宽像素相差甚大
            p_w_picpathttftext($this->img, $this->font_size, mt_rand(-30, 30), ($this->img_length/$this->code_num)*$i+mt_rand(1,$this->font_size*0.2), $this->img_height*0.7+mt_rand(-$this->img_height*0.2, $this->img_height*0.2), $color_font, $this->ttf, $code);
        }
    }
    
    //输出图片至浏览器
    private function  outputImg(){
        //通知浏览器是png格式
        header('Content-type:p_w_picpath/png');
        //以png格式输出
        p_w_picpathpng($this->img);
        //销毁内存中的图片资源
        p_w_picpathdestroy($this->img);
    }
    
    public function __set($key,$value){
        
    }
    
    public function __get($value){
        
    }
    
    
}


相关内容

热门资讯

又一家河南企业冲刺A+H上市!... 【大河财立方消息】 5月27日,大河财立方记者获悉,汉威科技集团股份有限公司(以下简称:汉威科技)正...
老佛爷百货败走西单,北京店今日... 【大河财立方 记者 王宁宁 王宇 北京报道 】 最后半天,打折清场了!”5月27日中午,大河财立方...
豫企IPO提速!本月6家河南企... 【大河财立方消息】继嘉晨智能、天海电子、洛轴股份、超聚变、鑫宇科技之后,本月又一家河南企业推进A股上...
科创板第二大IPO来了!存储芯... 【大河财立方消息】5月27日,国内存储芯片龙头长鑫科技科创板IPO,获上市委会议通过。长鑫科技此次I...
国安部披露:几百元家用气象站,... 一台售价仅几百元的家用气象站,竟24小时对着军事禁区采集气象数据并自动上传至境外服务器!这不是谍战片...
我国渤海一亿吨级油田全面投产 新华社北京5月27日电(记者王悦阳、梁姊)中国海油5月27日宣布,我国海上最大规模浅层岩性油田——垦...
河南公布2026年省级职业技能... 近日,河南省人力资源和社会保障厅印发《关于组织开展2026年河南省职业技能竞赛活动的通知》,明确20...
核查:起底“西藏寺庙漕强拆”A... 速览- 网传“中国西藏强拆寺庙”视频实为AI生成,所谓西藏现有寺庙“约70座”的说法同样不实。实际上...
伊朗先发制人了 伊朗这次先发制人了。我指的是舆论战场。以前的常态,一般都是特朗普率先放料,伊朗要投降了,伊朗急于达成...
视频丨无人机给电力设备做“体检... 记者从国家能源局了解到,为更好促进人工智能与能源双向赋能,我国正式对外公布了51个“人工智能+”能源...