svg-captcha-isszz

用 PHP 生成 SVG 格式验证码
授权协议 MIT
开发语言 PHP
所属分类 Web应用开发、 验证码(Captcha)
软件类型 开源软件
地区 国产
投 递 者 万俟棋
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

在 PHP 中生成 SVG 格式的验证码。

部分代码依赖 thinkphp6。

安装

composer require isszz/svg-captcha -vvv

接下来将字体放入tp根目录下的config/font目录

配置

<?php

// SVG 验证码配置

return [
    'width' => 150, // 宽度
    'height' => 50, // 高度
    'noise' => 5, // 干扰线条的数量
    'inverse' => false, // 反转颜色
    'color' => true, // 文字是否随机色
    'background' => '', // 验证码背景色
    'size' => 4, // 验证码字数
    'ignoreChars' => '', // 验证码字符中排除
    'fontSize' => 52, // 字体大小
    'charPreset' => 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789', // 预设随机字符
    'math' => '', // 计算类型, 如果设置不是+或-则随机两种
    'mathMin' => 1, // 用于计算的最小值
    'mathMax' => 9, // 用于计算的最大值
    'fontName' => 'Comismsh.ttf', // 用于验证码的字体, 建议字体文件不超过3MB
];

使用方法

控制器内使用��

<?php
declare (strict_types = 1);

namespace app\index\controller;

use think\Response;
use think\Request;

class Captcha
{
    /**
     * 获取验证码, 用于api
    */
    public function index(Request $request)
    {
        $config = $this->BuildParam($request->param());
        
        return json([
            'code' => 0,
            'data' => svg_captcha($config),
            'msg' => 'success',
        ]);
    }

    /**
     * 直接显示svg验证码
    */
    public function svg(Request $request)
    {   
        $config = $this->BuildParam($request->param());

        $content = svg_captcha($config);
        
        return response($content, 200, ['Content-Length' => strlen($content)])->contentType('image/svg+xml');
    }

    /**
     * 验证输入验证码是否正确
    */
    public function check($code)
    {
        if(svg_captcha_check($code) === true) {
            return json([
                'code' => 0,
                'data' => null,
                'msg' => 'success',
            ]);
        }
        return json([
            'code' => 1,
            'data' => null,
            'msg' => 'error',
        ]);
    }

    /**
     * 根据传入参数组装配置
     * 
     * /captcha/svg//w/200/h/60/s/72/l/5
    */
    public function BuildParam($params = [])
    {
        $config = [];

        if(empty($params)) {
            return [];
        }

        // 模式,1=加法 2=减法, 或者随机两种
        if(!empty($params['m'])) {
            if($params['m'] == 1) {
                $config['math'] = '+';
            } elseif($params['m'] == 2) {
                $config['math'] =  '-';
            } else {
                $config['math'] = 'rand';
            }
        }

        if(!empty($params['w'])) {
            $config['width'] = $params['w'];
        }

        if(!empty($params['h'])) {
            $config['height'] = $params['h'];
        }

        // 文字大小
        if(!empty($params['s'])) {
            $config['fontSize'] = $params['s'];
        }

        // 显示文字数量, 非算数模式有效
        if(!empty($params['l'])) {
            $config['size'] = $params['l'];
        }

        // 干扰线条数量
        if(!empty($params['n'])) {
            $config['noise'] = $params['n'];
        }

        // 背景色, #fefefe
        if(!empty($params['b'])) {
            $config['background'] = $params['b'];
        }

        return $config;
    }
}

注册进tp验证工具

Validate::maker(function ($validate) {
    $validate->extend('svgcaptcha', function ($value) {
        return svg_captcha_check($value);
    }, ':attribute错误!');
});

本组件基于如下开源库

 相关资料
  • 本文向大家介绍java生成饼图svg及JFreeChart生成svg图表,包括了java生成饼图svg及JFreeChart生成svg图表的使用技巧和注意事项,需要的朋友参考一下 Jfreechart本身不能生成SVG图形,但是可以借助另外一个东西,辅助生成.好像是这个:batik ,具体代码请看下文 一:Java生成svg饼图,附带了一个标签显示各个颜色代表的部分 二.java生成SVG 3D饼

  • 本文向大家介绍python之验证码生成(gvcode与captcha),包括了python之验证码生成(gvcode与captcha)的使用技巧和注意事项,需要的朋友参考一下 今天向大家总结一下python在做项目时用到的验证码生成工具:gvcode与captcha gvcode 全称:graphic-verification-code 安装: 使用: 效果: captcha 安装: 使用: 效果

  • 关于 SVG GIF、JPEG、WBMP 和 PNG 等用于 Web 的位图图像格式,都使用像素网格来描述图像。生成的文件有可能很庞大,局限于单一(通常较低)的分辨率,且在 Web 上会占用大量带宽。SVG 是将图像描述为形状、路径、文本和滤镜效果的矢量格式。生成的文件很小,可在 Web、打印甚至资源有限的手持设备上提供较高品质的图像。用户无须牺牲锐利程度、细节或清晰度,即可在屏幕上放大 SVG

  • 问题内容: 我正在尝试在Django应用程序中使用Python从SVG输入文件生成PDF。 我已经找到了两个可行的解决方案:cairo + rsvg和imagemagick,但是它们都有一个问题:它们具有一些我不想安装在服务器上的奇怪的依赖项,例如DBUS和GTK。 因此,我正在寻求另一种从SVG生成PDF的方法,而不必在服务器上安装所有这些愚蠢的依赖项。 问题答案: 您考虑过svglib吗? 它

  • 如果我使用web inspector来“编辑元素的HTML”,即使我没有改变任何东西,梯度也会突然起作用--所以我猜Chrome的SVG解析或D3的元素生成中发生了一些奇怪的事情。 我认为这可能归因于和之间的混淆-D3似乎在camelCased元素上有一些问题,当我让它创建元素时,它不会选择它们(我得到了很多很多副本)。此外,在Chrome的检查器中,这些元素显示为;当我编辑为HTML时,它们是。

  • 本文向大家介绍php生成图片验证码,包括了php生成图片验证码的使用技巧和注意事项,需要的朋友参考一下 先给看下 大致的效果 那么接下来的就直接贴代码吧 再给大家分享一个可以生成中文验证码 再来一个实例吧 接下来只要在页面中调用就可以了: 如果想实现 "看不清?换一张" 效果,添加如下 JS 到页面中 以上所述就是本文的全部内容了,希望大家能够喜欢。