php代码示例如何生成二维码_php生成二维码代码示例【示例】

最稳妥方案是使用 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 是重大重构版本,接口变化明显,老项目升级容易出错:

  • v3 用 QrCode::png() 直接输出;v4 必须显式指定 PngWriterSvgWriter
  • 设置尺寸: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 通道解析不稳定,换成白底更可靠

生成后务必用多个主流扫码 App(微信、支付宝、iOS 原生相机)实测,别只看图片是否“显示正常”。