Beispiel #1
0
 public function render($key = '')
 {
     // 图片宽(px)
     $this->imageW || ($this->imageW = $this->codeLen * $this->fontSize + $this->codeLen * $this->fontSize / 2);
     // 图片高(px)
     $this->imageH || ($this->imageH = $this->fontSize * 1.5);
     // 建立一幅 $this->imageW x $this->imageH 的图像
     $this->_image = imagecreate($this->imageW, $this->imageH);
     // 设置背景
     imagecolorallocate($this->_image, $this->bg[0], $this->bg[1], $this->bg[2]);
     // 验证码字体随机颜色
     $this->_color = imagecolorallocate($this->_image, mt_rand(1, 150), mt_rand(1, 150), mt_rand(1, 150));
     // 验证码使用随机字体
     $ttfPath = dirname(__FILE__) . '/captcha/' . ($this->useZh ? 'zhttfs' : 'ttfs') . '/';
     $this->fontttf = $ttfPath . $this->fontttf;
     if ($this->useNoise) {
         // 绘杂点
         $this->_writeNoise();
     }
     if ($this->useCurve) {
         // 绘干扰线
         $this->_writeCurve();
     }
     // 绘验证码
     $code = array();
     // 验证码
     $codeNX = -20;
     // 验证码第N个字符的左边距
     if ($this->useZh) {
         // 中文验证码
         for ($i = 0; $i < $this->codeLen; $i++) {
             $code[$i] = iconv_substr($this->zhSet, floor(mt_rand(0, mb_strlen($this->zhSet, 'utf-8') - 1)), 1, 'utf-8');
             imagettftext($this->_image, $this->fontSize, mt_rand(-40, 40), $this->fontSize * ($i + 1) * 1.5, $this->fontSize + mt_rand(10, 20), $this->_color, $this->fontttf, $code[$i]);
         }
     } else {
         for ($i = 0; $i < $this->codeLen; $i++) {
             $code[$i] = $this->codeSet[mt_rand(0, strlen($this->codeSet) - 1)];
             $codeNX += mt_rand($this->fontSize * 1.2, $this->fontSize * 1.4);
             //echo $codeNX.'<br/>';
             imagettftext($this->_image, $this->fontSize, mt_rand(-30, 30), $codeNX, $this->fontSize * 1.3, $this->_color, $this->fontttf, $code[$i]);
         }
     }
     // 保存验证码
     $key = $this->authcode($this->seKey) . $key;
     $code = $this->authcode(strtoupper(implode('', $code)));
     $secode = array();
     $secode['verify_code'] = $code;
     // 把校验码保存到session
     $secode['verify_time'] = $this->_nowTime->timeStamp;
     // 验证码创建时间
     Util_Session::set($key, $secode);
     header('Cache-Control: private, max-age=0, no-store, no-cache, must-revalidate');
     header('Cache-Control: post-check=0, pre-check=0', false);
     header('Pragma: no-cache');
     header("content-type: image/png");
     // 输出图像
     imagepng($this->_image);
     imagedestroy($this->_image);
 }