封装captcha类 -- 画图四
Posted Mr Zhu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了封装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();
以上是关于封装captcha类 -- 画图四的主要内容,如果未能解决你的问题,请参考以下文章