中文字幕在线观看,亚洲а∨天堂久久精品9966,亚洲成a人片在线观看你懂的,亚洲av成人片无码网站,亚洲国产精品无码久久久五月天

基于GD庫的php驗(yàn)證碼類(支持中英文字體、背景、干擾點(diǎn)線、扭曲.......)

2018-07-20    來源:open-open

容器云強(qiáng)勢(shì)上線!快速搭建集群,上萬Linux鏡像隨意使用
<?php
/*
 * Captcha Class base on PHP GD Lib
 * @author Design
 * @version 1.0
 * @copyright js8.in 2010
 * @demo
 * include('captchaClass.php');
 * $captchaDemo=new Captcha();
 * $captchaDemo->createImage();
 */
class Captcha
{
    //@定義驗(yàn)證碼圖片高度
    private $height;
    //@定義驗(yàn)證碼圖片寬度
    private $width;
    //@定義驗(yàn)證碼字符個(gè)數(shù)
    private $textNum;
    //@定義驗(yàn)證碼字符內(nèi)容
    private $textContent;
    //@定義字符顏色
    private $fontColor;
    //@定義隨機(jī)出的文字顏色
    private $randFontColor;
    //@定義字體大小
    private $fontSize;
    //@定義字體
    private $fontFamily;
    //@定義背景顏色
    private $bgColor;
    //@定義隨機(jī)出的背景顏色
    private $randBgColor;
    //@定義字符語言
    private $textLang;
    //@定義干擾點(diǎn)數(shù)量
    private $noisePoint;
    //@定義干擾線數(shù)量
    private $noiseLine;
    //@定義是否扭曲
    private $distortion;
    //@定義扭曲圖片源
    private $distortionImage;
    //@定義是否有邊框
    private $showBorder;
    //@定義驗(yàn)證碼圖片源
    private $image;
    
    //@Constructor 構(gòu)造函數(shù)
    public function Captcha()
    {
        $this->textNum    = 4;
        $this->fontSize   = 16;
        $this->fontFamily = 'c:\windows\fontsSIMYOU.ttf'; //設(shè)置中文字體,可以改成linux的目錄
        $this->textLang   = 'en';
        $this->noisePoint = 30;
        $this->noiseLine  = 3;
        $this->distortion = false;
        $this->showBorder = false;
    }
    
    
    //@設(shè)置圖片寬度
    public function setWidth($w)
    {
        $this->width = $w;
    }
    
    //@設(shè)置圖片高度
    public function setHeight($h)
    {
        $this->height = $h;
    }
    
    //@設(shè)置字符個(gè)數(shù)
    public function setTextNumber($textN)
    {
        $this->textNum = $textN;
    }
    
    //@設(shè)置字符顏色
    public function setFontColor($fc)
    {
        $this->fontColor = sscanf($fc, '#%2x%2x%2x');
    }
    
    //@設(shè)置字號(hào)
    public function setFontSize($n)
    {
        $this->fontSize = $n;
    }
    
    //@設(shè)置字體
    public function setFontFamily($ffUrl)
    {
        $this->fontFamily = $ffUrl;
    }
    
    //@設(shè)置字符語言
    public function setTextLang($lang)
    {
        $this->textLang = $lang;
    }
    
    //@設(shè)置圖片背景
    public function setBgColor($bc)
    {
        $this->bgColor = sscanf($bc, '#%2x%2x%2x');
    }
    
    //@設(shè)置干擾點(diǎn)數(shù)量
    public function setNoisePoint($n)
    {
        $this->noisePoint = $n;
    }
    
    //@設(shè)置干擾線數(shù)量
    public function setNoiseLine($n)
    {
        $this->noiseLine = $n;
    }
    
    //@設(shè)置是否扭曲
    public function setDistortion($b)
    {
        $this->distortion = $b;
    }
    
    //@設(shè)置是否顯示邊框
    public function setShowBorder($border)
    {
        $this->showBorder = $border;
    }
    
    //@初始化驗(yàn)證碼圖片
    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);
    }
    
    //@產(chǎn)生隨機(jī)字符
    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); //轉(zhuǎn)換編碼到utf8
                break;
        }
        return substr($string, 1);
    }
    
    //@輸出文字到驗(yàn)證碼
    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]);
        }
    }
    
    //@生成干擾點(diǎn)
    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);
        }
        
    }
    
    //@產(chǎn)生干擾線
    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;
    }
    
    //@生成驗(yàn)證碼圖片
    public function createImage()
    {
        $this->initImage(); //創(chuàng)建基本圖片
        $this->createText(); //輸出驗(yàn)證碼字符
        if ($this->distortion) {
            $this->distortionText();
        } //扭曲文字
        $this->createNoisePoint(); //產(chǎn)生干擾點(diǎn)
        $this->createNoiseLine(); //產(chǎn)生干擾線
        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();

//@設(shè)置驗(yàn)證碼寬度
//$captcha5->setWidth(200);

//@設(shè)置驗(yàn)證碼高度
//$captcha5->setHeight(50);

//@設(shè)置字符個(gè)數(shù)
$captcha5->setTextNumber(5);

//@設(shè)置字符顏色
//$captcha5->setFontColor('#ff9900');

//@設(shè)置字號(hào)大小
//$captcha5->setFontSize(25);

//@設(shè)置字體
$captcha5->setFontFamily('c:\windows\fonts\STXINGKA.TTF');

//@設(shè)置語言
$captcha5->setTextLang('cn');

//@設(shè)置背景顏色
//$captcha5->setBgColor('#000000');

//@設(shè)置干擾點(diǎn)數(shù)量
//$captcha5->setNoisePoint(600);

//@設(shè)置干擾線數(shù)量
//$captcha5->setNoiseLine(10);

//@設(shè)置是否扭曲
//$captcha5->setDistortion(true);

//@設(shè)置是否顯示邊框
$captcha5->setShowBorder(true);

//輸出驗(yàn)證碼
$code = $captcha5->createImage();
//$_SESSION['captchaCode']['content']=$code;
//$_SESSION['captchaCode']['time']=microtime();
?>

標(biāo)簽: linux

版權(quán)申明:本站文章部分自網(wǎng)絡(luò),如有侵權(quán),請(qǐng)聯(lián)系:west999com@outlook.com
特別注意:本站所有轉(zhuǎn)載文章言論不代表本站觀點(diǎn)!
本站所提供的圖片等素材,版權(quán)歸原作者所有,如需使用,請(qǐng)與原作者聯(lián)系。

上一篇:PHP Socket 編程實(shí)現(xiàn)

下一篇:c# Fusion Charts 簡單操作