PHP生成图片验证码

PHP生成图片验证码

分为两个方法函数

<?php
/**
 * PHP生成图片验证码
 * Class VerifyImage
 */
class VerifyImage
{
    // 生成随机字串
    private $verifyCode;
    // 图片对象
    private $image;

    /**
     * todo:生成随机验证码
     * @param int $type 类型 【1】纯数字,【2】纯字母,【3】数字加字母
     * @param int $length
     * @return bool|string
     */
    public function createCode($type = 3, $length = 5)
    {
        if ($type == 1) {
            $verifyCode = implode('', range(0, 9));
        } elseif ($type == 2) {
            $verifyCode = implode('', array_merge(range('a', 'z'), range('A', 'Z')));
        } else {
            $verifyCode = implode('', array_merge(range('a', 'z'), range(0, 9), range('A', 'Z')));
        }

        //判断生成字符是否符合要求
        if (strlen($verifyCode) < $length) {
            return false;
        }
        //打乱字符串
        $verifyCode = str_shuffle($verifyCode);
        $this->verifyCode = substr($verifyCode, 0, $length);
        return $this->verifyCode;
    }

    /**
     * todo:加入字符,生成图片,并加入干扰线,干扰素
     * @param int $width 图片宽度
     * @param int $height 图片高度
     */
    public function createImage($width = 80, $height = 30)
    {
        $verifyCode = $this->verifyCode;
        $image      = imagecreatetruecolor($width, $height);

        //白色背景
        $white = imagecolorallocate($image, 255, 255, 255);
        //字体颜色
        $fontStyle = imagecolorallocate($image, rand(0, 255), rand(0, 255), rand(0, 255));;
        imagefill($image, 0, 0, $white);
        // 使用默认字体,无法修改文字大小
        // imagestring($image, 5, 10, 10, $verifyCode, $fontStyle);
        // 导入自定义字体,修改文字大小
        imagettftext($image, 24, 0, 5, 20, $fontStyle, '../microsofthimalaya.ttf', $verifyCode);
        //加入干扰点
        for ($i = 0; $i < 80; $i++) {
            $color = imagecolorallocate($image, rand(0, 255), rand(0, 255), rand(0, 255));
            imagesetpixel($image, rand(0, $width), rand(0, $height), $color);
        }
        //干扰线
        for ($i = 0; $i < 5; $i++) {
            $color = imagecolorallocate($image, rand(0, 255), rand(0, 255), rand(0, 255));
            imageline($image, rand(0, $width), rand(0, $height), rand(0, $width), rand(0, $height), $color);
        }
        //输出图片
        header("Content-type: image/png");
        imagepng($image);
        //释放资源
        imagedestroy($image);
    }
}

?>

实例

$VerifyImage = new VerifyImage();
$code = $VerifyImage->createCode();
$_SESSION['$VerifyCode'] = $code;
$VerifyImage->createImage();

猜你喜欢

转载自my.oschina.net/u/3756690/blog/2876940