php captcha

找了很多扩展包,要嘛是拿不到验证码文字,要嘛就是拿不到图片路径。

试了很多,最后决定使用这个   lifei6671/php-captcha  扩展包,步骤如下:

1.安装

使用 Composer

在composer.json中的require中加入  "lifei6671/php-captcha": "0.1.*" 

然后执行 composer update

2.在控制器中写获取图形验证码的代码

$captch=newCaptchaBuilder();

$captch->initialize([

    'width'=>150,//宽度

   'height'=>50,//高度

    'line'=>false,//直线

    'curve'=>true,//曲线

    'noise'=>1,//噪点背景

    'fonts'=>[]//字体

]);

$captch->create();

$captchaCode = $captch->getText();//获取验证码文字

然后呢,用 $captch->output(1);  来显示图片,显示出来如下图:

php captcha_第1张图片

发现出现了乱码的现象,记得以前也遇到过这个情况,是百度出的结果,在代码最下面加上句 exit();就可以显示图片了。结果是我的记忆还是不错的,真的有用,可是至于为什么,就记不清了,需要在研究研究。

但是这种情况的话,不适用与前后端分离,我是把验证码的文字,存在了cache里,并带着个uuid来识别用户。所以需要把uuid传给前端,这样的话就传不了。需要传给前端url和uuid,于是乎就想着把图片格式改成base64格式。

代码如下:

php captcha_第2张图片

执行结果:

现在可以看到这貌似是一个base64格式的图片的,就是前面少了头 'data:image/png;base64,' ,没关系,我们可以自己拼上。来测试一下,把这段代码加上头复制到url上如果显示出的是图片,我们就成功了。

php captcha_第3张图片

成功!!

然后我们完善一下,给前端一个友好的返回数据格式,完整代码如下:

    public function getCaptcha()

{

       $captch = new \Minho\Captcha\CaptchaBuilder();

        $captch->initialize([

            'width'  => 150,    // 宽度

            'height' => 50,      // 高度

            'line'  => false,  // 直线

            'curve'  => true,    // 曲线

            'noise'  => 1,      // 噪点背景

            'fonts'  => []      // 字体

        ]);

        $captch->create();

        $uuid = uniqid();

        //生成并返回图片流base64编码

        ob_start ();

        $captch->output(1);

        $captchaCode = $captch->getText();

        $image_data = ob_get_contents ();

        ob_end_clean ();

        $captchaDataUrl = base64_encode ($image_data);

        $array = [

            'captchaDataUrl' => 'data:image/png;base64,'.$captchaDataUrl,

            'captcha_uuid' => $uuid

        ];

        Cache::tags(['captcha'])->put($uuid,$captchaCode,5);

        return $this->result('成功',$array);

    }

返回格式如下:

php captcha_第4张图片


完成!

你可能感兴趣的:(php captcha)