php输出验证码图像

咱们接着上一篇《php生成验证码字符串》继续来说。
首先,我们要知道从哪几个步骤来做

public function outImage(){
      //创建画布
      $this->createImage();
      //填充背景色
      $this->fillBack();
      //将验证码字符串放到画布上
      $this->drawChar(); 
      //添加干扰元素
      $this->drawDisturb();
      //输出并显示
      $this->show();
    }

第一、创建画布

 protected function createImage(){
      $this->image=imagecreatetruecolor($this->width, $this->height);
    }

第二、填充背景色

protected function fillBack(){
      imagefill($this->image, 0, 0, $this->lightColor());

    }
    protected function lightColor(){
      return imagecolorallocate($this->image, mt_rand(130,255), mt_rand(130,255), mt_rand(130,255));
    }

第三、将验证码字符串放到画布上


    protected function drawChar(){
     $width=ceil($this->width/$this->number);
     for($i=0;$i<$this->number;$i++){
      $x=mt_rand($i*$width-5,($i+1)*$width-5);
      $y=mt_rand(0,$this->height-15);
      imagechar($this->image,5, $x, $y, $this->code[$i], $this->dackColor());
     }
    }
    protected function dackColor(){
      return imagecolorallocate($this->image, mt_rand(0,120), mt_rand(0,120), mt_rand(0,120));
    }

第四、添加干扰元素

protected function drawDisturb(){
      for ($i=0; $i <150 ; $i++) { 
        $x= mt_rand(0,$this->width);
        $y= mt_rand(0,$this->height);
        imagesetpixel($this->image, $x, $y, $this->lightColor());
    
      }

第五、输出显示图像

 protected function show(){
      header('Content-Type:image/png'); 
      imagepng($this->image);
    }

最后完整代码总结

<?php
header("content-type:text/html;charset=utf-8"); 
$code=new Code();
$code->outImage();
  class Code{
  	//验证码个数
  	protected $number;
  	//验证码类型
  	protected $codeType;
  	//图像宽度
  	protected $width;
  	//图像高度
  	protected $height;
  	//图片资源
  	protected $image;
  	//验证码字符串
  	protected $code;

  	public function __construct($number=4,$codeType=2,$width=100,$height=50){
  		//初始化属性
  		$this->number=$number;
  		$this->codeType=$codeType;
  		$this->width=$width;
  		$this->height=$height;

  		//生成验证码函数
  		$this->code=$this->createCode();
  		// echo $this->code;

  	}
    public function __destruct(){
      imagedestroy($this->image);
    }
    public function __get($name){
      if($name=='code'){
        return $this->code;
      }
      return false;
    }
  	protected function createCode(){
  		//通过验证码类型,生成不同类型验证码
  		switch ($this->codeType) {
  			case 0://纯数字
  				$code=$this->getNumnerCode();
  				break;
  			case 1://纯字母
  				$code=$this->getCharCode();
  				break;
  			case 2://数字字幕组合:
  				$code=$this->getNumCharCode();
  				break;
  			default:
  				die('不支持这种验证码类型');
  		}
  		return $code;
  	}
  	protected function getNumnerCode(){
  		$str=join('',range(0, 9));
  		return substr(str_shuffle($str), 0,$this->number);
  	}
  	protected function getCharCode(){
  		$str=join('',range('a', 'z'));
  		$str=$str.strtoupper($str);
  		return substr(str_shuffle($str),0, $this->number);
  	}
  	protected function getNumCharCode(){
  		$strNum=join('',range(0, 9));
  		$strCHar=join('',range('a', 'z'));
  		$str=$strNum.strtoupper($strCHar);
  		return substr(str_shuffle($str),0, $this->number);
  	}



    protected function createImage(){
      $this->image=imagecreatetruecolor($this->width, $this->height);
    }
    protected function fillBack(){
      imagefill($this->image, 0, 0, $this->lightColor());

    }
    protected function lightColor(){
      return imagecolorallocate($this->image, mt_rand(130,255), mt_rand(130,255), mt_rand(130,255));
    }
    protected function dackColor(){
      return imagecolorallocate($this->image, mt_rand(0,120), mt_rand(0,120), mt_rand(0,120));
    }
    protected function drawChar(){
     $width=ceil($this->width/$this->number);
     for($i=0;$i<$this->number;$i++){
      $x=mt_rand($i*$width-5,($i+1)*$width-5);
      $y=mt_rand(0,$this->height-15);
      imagechar($this->image,5, $x, $y, $this->code[$i], $this->dackColor());
     }
    }
    protected function drawDisturb(){
      for ($i=0; $i <150 ; $i++) { 
        $x= mt_rand(0,$this->width);
        $y= mt_rand(0,$this->height);
        imagesetpixel($this->image, $x, $y, $this->lightColor());
    
      }
    }
    protected function show(){
      header('Content-Type:image/png'); 
      imagepng($this->image);
    }


    public function outImage(){
      //创建画布
      $this->createImage();
      //填充背景色
      $this->fillBack();
      //将验证码字符串放到画布上
      $this->drawChar(); 
      //添加干扰元素
      $this->drawDisturb();
      //输出并显示
      $this->show();
    }

  }

运行结果

在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值