直接 composer require 失败是因为 simple-qr-code 未注册 packagist 且已停止维护,v3.1.0 是唯一支持 logo 的版本,需手动添加 github 仓库并确认 php 版本兼容 gd 扩展要求。

为什么直接 composer require 会失败
Simple-QR-Code 并不是 Packagist 官方注册的包,它没有 composer.json 文件托管在 GitHub 主分支根目录下,所以执行 composer require simplesoftwareio/simple-qrcode 会报错:Could not find package simplesoftwareio/simple-qrcode。这不是你网络或 Composer 配置的问题,而是该库已停止维护、未提交到 Packagist,且原作者将主仓库迁移到了 simplesoftwareio/qrcode(v4+),但新包默认不支持 Logo 合成——这是关键分歧点。
用 v3 版本 + 自定义仓库方式加载(唯一可行路径)
要生成带 Logo 的二维码,必须使用 v3.x 分支(v3.1.0 是最后一个含 merge() 方法的稳定版)。你需要手动添加 GitHub 仓库源,并指定分支:
- 在项目根目录
composer.json中,添加"repositories"字段(注意:必须放在顶层,不能嵌套在其他字段里):
"repositories": [
{
"type": "vcs",
"url": "https://github.com/SimpleSoftwareIO/simple-qrcode"
}
]
- 然后运行:
composer require simplesoftwareio/simple-qrcode:3.1.0 - 如果提示版本冲突(比如 Laravel 9+ 默认要求 PHP 8.0+,而 v3.1.0 最高支持 PHP 7.4),需确认当前 PHP 版本兼容;不兼容时只能降级 PHP 或放弃 Logo 功能
merge() 方法调用时的三个硬性条件
v3 的 Logo 合成依赖 GD 扩展,且对输入图像格式、尺寸、透明通道有隐式要求,不满足任一条件都会静默失败或生成白图:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- Logo 图片必须是 PNG 格式(
.png),且自带 Alpha 通道(非“PNG 转 JPG 再改后缀”) - Logo 尺寸建议 ≤ 二维码总宽的 25%(例如 300×300 二维码,Logo 最好 ≤ 75×75),否则会严重扭曲码点
- 调用前必须确保 GD 已启用:
extension=gd在php.ini中开启,且php -m | grep gd能看到输出 - 示例代码片段(Laravel 中):
use SimpleSoftwareIO\QrCode\Facades\QrCode;
QrCode::size(300)
->merge(public_path('logo.png'), .3) // 第二个参数是缩放比例,0.3 ≈ 30%
->generate('https://example.com');
替代方案:不用 Simple-QR-Code,改用 endroid/qr-code + 手动叠加
如果你卡在 PHP 版本、GD 兼容性或 Composer 报错上,更稳妥的做法是切换到活跃维护的 endroid/qr-code(v4+),它本身不内置 Logo 合成,但提供原始图像资源,可自行用 GD 或 Imagick 叠加:
- 安装:
composer require endroid/qr-code - 生成二维码后拿到
$qrCode->writeString()返回的 PNG 二进制数据,用imagecreatefromstring()加载,再用imagecopyresized()把 Logo “贴”上去 - 注意:必须手动处理 Logo 的透明背景(
imagealphablending($qr, true)+imagesavealpha($qr, true)),否则白色底会覆盖二维码 - 这个路径自由度更高,也避开了 v3 的 PHP 版本锁死问题
真正麻烦的从来不是“怎么加 Logo”,而是 v3 的生态断层和 GD 的隐形约束——选错版本或忽略 PNG 透明通道,调试半天也出不来图。










