Thinkphp验证码类修改

作者:源码世界时间:2014-04-18分类:PHP评论:0浏览:4961


hinkphp集成了验证码类,可是样式需要修改 默认的太丑了。这时候我们需要找到 ORG/Util/Image类

在image你可以看到处理图片的方法都在这里面了。找到280多行的buildImageVerify方法  把原本的给注视掉 加上如下代码即可在这之前需要一个字体 位置放在根下的 Public/font/font.ttf没有字体使用默认的验证码字符

如下代码就是 验证码类修改版。


static function buildImageVerify($length=4, $mode=1, $type='png', $width=48, $height=22, $size='20',$verifyName='verify') {
       $fontpath=  dirname(__PATH__).'/Public/font/font.ttf';
       import('ORG.Util.String');//引入字符串类
       $randval = String::rand_string($length, $mode);//随机获得 $length个数字
      $_SESSION[$verifyName] = md5($randval);//把验证码存入session
        $width = ($length * 10 + 10) > $width ? $length * 10 + 10 : $width;//判断如果验证码的宽度小于宽度字符串*10+10
       if ($type != 'gif' && function_exists('imagecreatetruecolor')) {
           $im = imagecreatetruecolor($width, $height);
       } else {
           $im = imagecreate($width, $height);
       }
       $r = Array(225, 255, 255, 223);
       $g = Array(225, 236, 237, 255);
       $b = Array(225, 236, 166, 125);
       $key = mt_rand(0, 3);

       //$backColor = imagecolorallocate($im, $r[$key], $g[$key], $b[$key]);    //背景色(随机)
      
       $backColor = imagecolorallocate($im, 17, 168, 171);                         //自定义背景颜色
       $borderColor = imagecolorallocate($im, 100, 100, 100);                    //验证码边框色

       imagefilledrectangle($im, 0, 0, $width - 1, $height - 1, $backColor);  //画一个矩形
       imagerectangle($im, 0, 0, $width - 1, $height - 1, $borderColor);
       $stringColor = imagecolorallocate($im, mt_rand(0, 200), mt_rand(0, 120), mt_rand(0, 120));//设定随机颜色
       $whites=imagecolorallocate($im,255,255,255);//设定随机颜色
       // 干扰
       for ($i = 0; $i < 2; $i++) {
           imagearc($im, mt_rand(-10, $width), mt_rand(-10, $height), mt_rand(30, 300), mt_rand(20, 200), 55, 44, $stringColor);//增加线条干扰
       }
       for ($i = 0; $i < 1; $i++) {
           imagesetpixel($im, mt_rand(0, $width), mt_rand(0, $height), $stringColor);//增加像素干扰
 
       }
       
       $y = $height - ($height - $size) / 2;
        if(file_exists($fontpath)){
             for ($i = 0; $i < $length; $i++) {
                 $x = $size * $i + $left+10;
                 imagettftext($im, $size, mt_rand(10, 10), $x, $y, $whites, $fontpath, $randval{$i});
               }
         }else{
             for ($i = 0; $i < $length; $i++) {
              imagestring($im, 5, $i * 10 + 5, mt_rand(1, 8), $randval{$i}, $whites);
        
            }
      }
     
       Image::output($im, $type);
   }


后台调用的时候设置字体参数即可修改字体大小
  import('ORG.Util.Image');

 Image::buildImageVerify($length=4, $mode=1, $type='png', $width=100, $height=30,$size=30);

如果您没有找到适合你的解决方案,请联系我们寻求帮助支付鼓励

返回顶部
分享按钮