• 转载 支持中文字母数字、自定义字体php验证码程序


    <?php
    class Captcha{
     //@定义验证码图片高度
     private $height;
     //@定义验证码图片宽度
     private $width;
     //@定义验证码字符个数
     private $textNum;
     //@定义验证码字符内容
     private $textContent;
     //@定义字符颜色
     private $fontColor;
     //@定义随机出的文字颜色
     private $randFontColor;
     //@定义字体大小
     private $fontSize;
     //@定义字体
     private $fontFamily;
     //@定义背景颜色
     private $bgColor;
     //@定义随机出的背景颜色
     private $randBgColor;
     //@定义字符语言
     private $textLang;
     //@定义干扰点数量
     private $noisePoint;
     //@定义干扰线数量
     private $noiseLine;
     //@定义是否扭曲
     private $distortion;
     //@定义扭曲图片源
     private $distortionImage;
     //@定义是否有边框
     private $showBorder;
     //@定义验证码图片源
     private $image;
     
     //@Constructor 构造函数
     public function Captcha(){
     $this->textNum=4;
     $this->fontSize=16;
     $this->fontFamily='c:windowsfontsSIMYOU.ttf';//设置中文字体,可以改成linux的目录
     $this->textLang='en';
     $this->noisePoint=30;
     $this->noiseLine=3;
     $this->distortion=false;
     $this->showBorder=false;
     }


     
     //@设置图片宽度
     public function setWidth($w){
     $this->width=$w;
     }
     
     //@设置图片高度
     public function setHeight($h){
     $this->height=$h;
     }
     
     //@设置字符个数
     public function setTextNumber($textN){
     $this->textNum=$textN;
     }
     
     //@设置字符颜色
     public function setFontColor($fc){
     $this->fontColor=sscanf($fc,'#%2x%2x%2x');
     }
     
     //@设置字号
     public function setFontSize($n){
     $this->fontSize=$n;
     }
     
     //@设置字体
     public function setFontFamily($ffUrl){
     $this->fontFamily=$ffUrl;
     }
     
     //@设置字符语言
     public function setTextLang($lang){
     $this->textLang=$lang;
     }
     
     //@设置图片背景
     public function setBgColor($bc){
     $this->bgColor=sscanf($bc,'#%2x%2x%2x');
     }
     
     //@设置干扰点数量
     public function setNoisePoint($n){
     $this->noisePoint=$n;
     }
     
     //@设置干扰线数量
     public function setNoiseLine($n){
     $this->noiseLine=$n;
     }
     
     //@设置是否扭曲
     public function setDistortion($b){
     $this->distortion=$b;
     }
     
     //@设置是否显示边框
     public function setShowBorder($border){
     $this->showBorder=$border;
     }
     
     //@初始化验证码图片
     public function initImage(){
     if(empty($this->width)){$this->width=floor($this->fontSize*1.3)*$this->textNum+10;}
     if(empty($this->height)){$this->height=$this->fontSize*2;}
     $this->image=imagecreatetruecolor($this->width,$this->height);
     if(empty($this->bgColor)){
     $this->randBgColor=imagecolorallocate($this->image,mt_rand(100,255),mt_rand(100,255),mt_rand(100,255));
     }else{
     $this->randBgColor=imagecolorallocate($this->image,$this->bgColor[0],$this->bgColor[1],$this->bgColor[2]);
     }
     imagefill($this->image,0,0,$this->randBgColor);
     }
     
     //@产生随机字符
     public function randText($type){
     $string='';
     switch($type){
     case 'en':
     $str='ABCDEFGHJKLMNPQRSTUVWXY3456789';
     for($i=0;$i<$this->textNum;$i++){
     $string=$string.','.$str[mt_rand(0,29)];
     }
     break;
     case 'cn':
     for($i=0;$i<$this->textNum;$i++) {
     $string=$string.','.chr(rand(0xB0,0xCC)).chr(rand(0xA1,0xBB));
     }
     $string=iconv('GB2312','UTF-8',$string); //转换编码到utf8
     break;
     }
     return substr($string,1);
     }
     
     //@输出文字到验证码
     public function createText(){
     $textArray=explode(',',$this->randText($this->textLang));
     $this->textContent=join('',$textArray);
     if(empty($this->fontColor)){
     $this->randFontColor=imagecolorallocate($this->image,mt_rand(0,100),mt_rand(0,100),mt_rand(0,100));
     }else{
     $this->randFontColor=imagecolorallocate($this->image,$this->fontColor[0],$this->fontColor[1],$this->fontColor[2]);
     }
     for($i=0;$i<$this->textNum;$i++){
     $angle=mt_rand(-1,1)*mt_rand(1,20);
     imagettftext($this->image,$this->fontSize,$angle,5+$i*floor($this->fontSize*1.3),floor($this->height*0.75),$this->randFontColor,$this->fontFamily,$textArray[$i]);
     }
     }
     
     //@生成干扰点
     public function createNoisePoint(){
     for($i=0;$i<$this->noisePoint;$i++){
     $pointColor=imagecolorallocate($this->image,mt_rand(0,255),mt_rand(0,255),mt_rand(0,255));
     imagesetpixel($this->image,mt_rand(0,$this->width),mt_rand(0,$this->height),$pointColor);
     }
     
     }
     
     //@产生干扰线
     public function createNoiseLine(){
     for($i=0;$i<$this->noiseLine;$i++) {
     $lineColor=imagecolorallocate($this->image,mt_rand(0,255),mt_rand(0,255),20);
     imageline($this->image,0,mt_rand(0,$this->width),$this->width,mt_rand(0,$this->height),$lineColor);
     }
     }
     
     //@扭曲文字
     public function distortionText(){
     $this->distortionImage=imagecreatetruecolor($this->width,$this->height);
     imagefill($this->distortionImage,0,0,$this->randBgColor);
     for($x=0;$x<$this->width;$x++){
     for($y=0;$y<$this->height;$y++){
     $rgbColor=imagecolorat($this->image,$x,$y);
     imagesetpixel($this->distortionImage,(int)($x+sin($y/$this->height*2*M_PI-M_PI*0.5)*3),$y,$rgbColor);
     }
     }
     $this->image=$this->distortionImage;
     }
     
     //@生成验证码图片
     public function createImage(){
     $this->initImage(); //创建基本图片
     $this->createText(); //输出验证码字符
     if($this->distortion){$this->distortionText();} //扭曲文字
     $this->createNoisePoint(); //产生干扰点
     $this->createNoiseLine(); //产生干扰线
     if($this->showBorder){imagerectangle($this->image,0,0,$this->width-1,$this->height-1,$this->randFontColor);} //添加边框
     imagepng($this->image);
     imagedestroy($this->image);
     if($this->distortion){imagedestroy($this->$distortionImage);}
     return $this->textContent;
     }
     
    }
    ?>使用方法:

    <?php
    //session_start();
    header("Content-type:image/png");
    include('captcha5_class.php');
    $captcha5=new Captcha();
     
    //@设置验证码宽度
    //$captcha5->setWidth(200);
     
    //@设置验证码高度
    //$captcha5->setHeight(50);
     
    //@设置字符个数
    $captcha5->setTextNumber(5);
     
    //@设置字符颜色
    //$captcha5->setFontColor('#ff9900');
     
    //@设置字号大小
    //$captcha5->setFontSize(25);
     
    //@设置字体
    (这里的字体 使用前确保是有的
    $captcha5->setFontFamily('c:windowsfontsSTXINGKA.TTF');
     
    //@设置语言
    $captcha5->setTextLang('cn');
     
    //@设置背景颜色
    //$captcha5->setBgColor('#000000');
     
    //@设置干扰点数量
    //$captcha5->setNoisePoint(600);
     
    //@设置干扰线数量
    //$captcha5->setNoiseLine(10);
     
    //@设置是否扭曲
    //$captcha5->setDistortion(true);
     
    //@设置是否显示边框
    $captcha5->setShowBorder(true);
     
    //输出验证码
    $code=$captcha5->createImage();
    //$_SESSION['captchaCode']['content']=$code;
    //$_SESSION['captchaCode']['time']=microtime();
    ?>

    转载的类 测试的 先去掉session 

    本文转载自:php开发
     

  • 相关阅读:
    vim可以打开,gvim无法打开
    Ubuntu用apt-get安装时依赖包无法安装
    如何用mm、mmm编译android中的模块
    装饰模式简单的代码
    FileWriter和FileReader简单使用
    TCP/IP、Http、Socket的区别--特别仔细
    surface实例-小球弹起事例
    android中图片的三级缓存cache策略(内存/文件/网络)
    接口回调
    大公司的Java面试题集
  • 原文地址:https://www.cnblogs.com/havoe/p/4375334.html
Copyright © 2020-2023  润新知