最稳妥方案是使用 endroid/qr-code v4,它兼容 PHP 7.4–8.3、不强依赖 GD 特定函数、API 清晰且维护活跃;需注意 v4 链式调用、容错等级改用常量、必须显式指定 Writer,并谨慎处理 Logo 尺寸与边距。

用 endroid/qr-code 生成二维码最稳妥
PHP 原生不支持二维码生成,必须依赖第三方库。目前维护活跃、API 清晰、兼容 PHP 7.4–8.3 的首选是 endroid/qr-code(v4+)。它不依赖 GD 扩展的特定函数(比如 imageantialias),对 Docker 环境或精简镜像更友好。
安装命令:composer require endroid/qr-code
基础用法示例:
use Endroid\QrCode\QrCode;
use Endroid\QrCode\Writer\PngWriter;
$qrCode = QrCode::create('https://example.com');
$result = (new PngWriter())->write($qrCode);
header('Content-Type: image/png');
echo $result->getString();
GD 扩展没开或报 Call to undefined function imagecreate() 怎么办
这是最常卡住的一步。不是所有 PHP 环境默认启用 GD——尤其 Alpine Linux 容器、某些宝塔面板精简版、或自编译 PHP 时漏了 --with-gd。
- 检查是否启用:
php -m | grep gd;或写个phpinfo()页面搜 “gd” - Debian/Ubuntu:运行
sudo apt install php-gd,然后重启 PHP-FPM 或 Apache - Alpine:
apk add php7-gd(注意版本号匹配) - 如果实在不能装 GD,可换
bacon/bacon-qr-code(纯 PHP 实现,无扩展依赖),但体积略大、生成速度稍慢
endroid/qr-code v3 和 v4 参数差异要注意
v4 是重大重构版本,接口变化明显,老项目升级容易出错:
jquery animated滑动切换分页显示代码 , 分页的效果,通用于大部分网站,在商城网站当中,例如产品展示地时候,我们在每个页面就显示10个商品信息。后面的就在第二页显示,所以分页还是很实用的,php中文网推荐下载!
立即学习“PHP免费学习笔记(深入)”;
- v3 用
QrCode::png()直接输出;v4 必须显式指定PngWriter或SvgWriter - 设置尺寸:v3 是
->setSize(300);v4 改为QrCode::create(...)->setSize(300)(链式调用) - 容错等级:v3 用字符串
'L'/'M';v4 改用常量QrCode::ERROR_CORRECTION_LEVEL_LOW - v4 默认输出 PNG,若要 SVG,需换
SvgWriter并设 header 为image/svg+xml
生成带 Logo 的二维码,图片变形或边缘被裁怎么处理
不是简单叠加就能好看。Logo 太大、位置不对、没预留 margin,会导致扫码失败。
关键控制点:
- Logo 尺寸建议 ≤ 25% 的二维码边长(例如 300px 二维码,Logo 不超过 75px)
- 必须调用
->setLogoPath('/path/to/logo.png')+->setLogoSize(60)(像素值) - 务必加
->setMargin(10),否则 Logo 贴边会干扰定位图案 - 避免用透明背景 PNG 的 Logo——部分扫码器对 alpha 通道解析不稳定,换成白底更可靠










