ThinkPHP6 集成 Endroid/QrCode 生成带 Logo 二维码

Noah
Noah
发布时间:2026-10-14| 3人浏览过
原创

在 PHP 项目中,除了传统的 GD 库方案,endroid/qr-code 是一款功能完善且易于集成的现代二维码生成组件。通过 Composer 安装后,可轻松在 ThinkPHP6 中实现生成带 Logo、指定大小及前景色的二维码,无论是直接在页面渲染还是保存为本地图片都非常方便。

一、安装扩展包

在 ThinkPHP6 项目的根目录下,通过终端执行以下命令引入依赖:

composer require endroid/qr-code

等待安装完成后,即可在代码中调用相关类。

二、核心代码实现

将以下核心逻辑封装在 ThinkPHP6 的控制器(Controller)或专门的服务类中。代码涵盖了引用声明、参数定义以及完整的生成流程。

第1步:导入必要的命名空间

确保头部正确引入了用于控制颜色、编码、纠错级别及写入方式的类:

use Endroid\QrCode\Color\Color;
use Endroid\QrCode\Encoding\Encoding;
use Endroid\QrCode\ErrorCorrectionLevel\ErrorCorrectionLevelLow;
use Endroid\QrCode\QrCode;
use Endroid\QrCode\Label\Label;
use Endroid\QrCode\Logo\Logo;
use Endroid\QrCode\RoundBlockSizeMode\RoundBlockSizeModeMargin;
use Endroid\QrCode\Writer\PngWriter;

第2步:编写生成方法

定义 mkCode 函数,接收跳转 URL、是否保存标识及唯一 ID,根据参数返回 HTML 标签或触发文件保存:

public function mkCode(string $url = 'https://www.baidu.com', $is_save = false, $pid = 0)
{
    // 1. 实例化写入器
    $writer = new PngWriter();
    
    // 2. 构建二维码对象,设置各项属性
    $qrCode = QrCode::create($url)
        ->setEncoding(new Encoding('UTF-8')) // 设置字符编码为 UTF-8
        ->setErrorCorrectionLevel(new ErrorCorrectionLevelLow()) // 设置纠错级别为低 (适合含 Logo 时) 或 High (适合无 Logo)
        ->setSize(150)       // 二维码尺寸 (像素)
        ->setMargin(20)      // 白边边距
        ->setRoundBlockSizeMode(new RoundBlockSizeModeMargin()) // 圆角模式
        ->setForegroundColor(new Color(0, 0, 0))       // 二维码颜色 (黑)
        ->setBackgroundColor(new Color(255, 255, 255));  // 背景颜色 (白)

    // 3. 添加 Logo (可选)
    // 注意:请确保路径正确,Logo 建议置于 public/static/ 下
    $logo = Logo::create('static/haha.jpg') 
        ->setResizeToWidth(20); // Logo 宽度设为 20px

    // 4. 添加底部标签文字
    $label = Label::create('测试扫码') 
        ->setTextColor(new Color(0, 0, 0)); // 文字颜色黑色

    // 5. 组合生成结果
    $result = $writer->write($qrCode, $logo, $label);

    // 6. 处理返回与保存逻辑
    if (!$is_save) {
        // 不保存文件,直接生成 DATA URI 供 img 标签使用
        $dataUri = $result->getDataUri();
        return "<img src='$dataUri' alt='生成的二维码'>";
    }
    
    // 7. 保存至服务器磁盘
    $file_path = 'static/qrcode/';
    if (!file_exists($file_path)) {
        mkdir($file_path, 0777, true);
    }
    // 生成随机文件名
    $qrcode = 'qrcode_' . time() . mt_rand(1, 9) . '.png';
    $result->saveToFile('static/qrcode/' . $qrcode);
}

三、关键注意事项与排错

1. 链接格式必须包含协议

生成可用于浏览器扫码跳转的二维码时,$url 参数必须是完整的绝对地址,例如 http://example.com 或 https://example.com。如果仅输入域名(不带 http/https),大多数扫描软件会将其识别为普通文本而非链接,导致无法自动跳转。

2. 关于纠错级别的选择

代码示例中使用了 ErrorCorrectionLevelLow。这是因为加入了中心 Logo 遮挡了部分二维码图案。如果去除 Logo,或者对图片清晰度要求极高,建议将纠错级别调整为 High 以保证扫描成功率。

3. 微信小程序唤起场景

若目的是扫码直接打开微信小程序而非网页,需使用微信提供的特定 Scheme 或 AppId 规则。参考官方文档或在微信开放平台获取相应的跳转链接模板。此类特殊协议同样需要遵循上述“带完整协议前缀”的要求进行格式化。

四、总结

利用 Endroid/QrCode 在 ThinkPHP6 中生成二维码,相比底层手写 GD 图像函数更加规范且具有高度的可扩展性。开发者可以根据具体的业务场景(如营销海报、系统登录验证等),灵活调整颜色、尺寸、Logo 样式及输出形式。以上就是 ThinkPHP6 使用 Endroid/QrCode 生成二维码的详细内容,更多关于 ThinkPHP6 开发技巧的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。