为了账号安全,请及时绑定邮箱和手机立即绑定

不显示验证码,只有一个白色的方块

<?php

Class Captcha{

//字体文件

private $_fontfile='';

//字体大小

private $_size=20;

//宽度

private $_width=200;

//高度

private $_height=50;

//验证码长度

private $_length=4;

//画布资源

private $_image=null;

//干扰元素

//雪花*的个数

private $_snow=0;

//像素个数

private $_pixel=0;

//线段个数

private $_line=0;



    //初始化数据

public function _construct($config=array()){


if(is_array($config)&&count($config)>0){

   //检测字体文件是否存在并且可读

if(isset($config['fontfile'])&&is_file($config['fontfile'])&&is_readable($config['fontfile'])){

$this->_fontfile=$config['fontfile'];

}else{

return false;

    }

    //检测是否设置画布宽或高

    if(isset($config['width'])&&$config['width']>0){

    $this->_width=(int)$config['width'];

    }

    if(isset($config['height'])&&$config['height']>0){

    $this->_height=(int)$config['height'];

    }

    //检测是否设置字体大小

    if(isset($config['size'])&&$config['size']>0){

    $this->_size=(int)$config['size'];

    }

    //检测是否设置验证码长度

    if(isset($config['length'])&&$config['length']>0){

    $this->_length=(int)$config['length'];

    }

    //配置干扰元素

    if(isset($config['snow'])&&$config['snow']>0){

    $this->_snow=(int)$config['snow'];

    }

    if(isset($config['pixel'])&&$config['pixel']>0){

    $this->_pixel=(int)$config['pixel'];

    }

    if(isset($config['line'])&&$config['line']>0){

    $this->_line=(int)$config['line'];

    }

    $this->_image=imagecreatetruecolor($this->_width, $this->_height);

    return $this->_image;



}else{

return false;

}

}


public function getCaptcha(){

$white=imagecolorallocate($this->_image,255,255,255);

//填充矩形

imagefilledrectangle($this->_image,0,0,$this->_width,$this->_height,$white);

//生成验证码

$str=$this->_generateStr($this->_length);

if($str==false){

return false;

}

$fontfile=$this->_fontfile;

//绘制验证码

for($i=0;$i<$this->_length;$i++){

$size=$this->_size;

$angle=mt_rand(-15,15);

$x=ceil($this->_width/$this->_length)*$i+mt_rand(5,10);

$y=ceil($this->_height/1.5);

$color=$this->_getRandColor();

//$text=mb_substr($str,$i,1,'utf-8');

$text=$str{$i};

imagettftext($this->_image,$size, $angle, $x, $y, $color, $fontfile, $text);

}

//产生干扰元素

if($this->_snow){

//使用雪花当干扰元素

$this->_getSnow();

}else{

if($this->_pixel){

$this->_getPixel();


}

if($this->_line){

$this->_getLine();


}

}

//输出图像

header('content-type:image/png');

imagepng($this->_image);

imagedestroy($this->_image);

return strtolower($str);

}

        private function _getSnow(){

   for($i=1;$i<=$this->_snow;$i++){

     imagestring($this->_image,mt_rand(1,5),mt_rand(0,$this->_width),mt_rand(0,$this->_height),'*', $this->_getRandColor());

        }

}

   private function _getPixel(){

    for($i=1;$i<=$this->_pixel;$i++){

   imagesetpixel($this->_image,mt_rand(0,$this->_width),mt_rand(0,$this->_height),$this->_getRandColor());

}

}

   private function _getLine(){

    for($i=1;$i<=$this->_line;$i++){

    imageline($this->_image,mt_rand(0,$this->_width),mt_rand(0,$this->_height),mt_rand(0,$this->_width),mt_rand(0,$this->_height),$this->_getRandColor());

}

}

   

//产生验证码字符

private function _generateStr($length=4){

if($length<1 || $length>10){

return false;

}

$chars=array(

'a','b','c','d','e','f','g','h','k','m','n','p','x','y',

'A','B','C','D','E','F','G','H','K','M','N','P','X','Y',

1,2,3,4,5,6,7,8,9

            );

$str=join('',array_rand(array_flip($chars),$length));

return $str;


}

//产生随机颜色

private function _getRandColor(){

     return imagecolorallocate($this->_image,mt_rand(0,255),mt_rand(0,255),mt_rand(0,255));

}

}


正在回答

2 回答

字体问题!好好的检查 一下

0 回复 有任何疑惑可以回复我~

一样一样

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

不显示验证码,只有一个白色的方块

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信