ThinkPHP6 集成 Endroid/QrCode 生成带 Logo 二维码
在 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 开发技巧的资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









