PHP QR Code 是个纯 PHP 的二维码生成库,基于 C 语言 libqrencode 移植而来。不用装扩展,丢到项目里就能用。支持 PNG、SVG、EPS、文本四种输出格式。
为什么还要用它? 这个库兼容 PHP 5.3 ~ 5.6,稍微改改也能跑在 PHP 7/8 上。现在 GitHub 上大多数二维码库都要求 PHP 7.4 起步甚至 PHP 8+,老项目想找个能用的越来越难。这个库在老机器上稳得很,不用升级 PHP 版本也不用折腾 Composer,所以还是值得记一下。
源码地址:https://github.com/t0k4rt/phpqrcode(原仓库 2014 年就停更了,网上很多 fork,找个能用的就行)
怎么用
下载后只需要引入一个文件:
require_once 'QRcode.php';
生成一张二维码图片,一行就够:
QRcode::png('https://www.example.com');上面这行代码直接向浏览器输出一张 PNG 二维码图片。如果你想保存到文件,第二个参数传文件路径就行。
有哪些方法
核心类是 QRcode,所有方法都是静态的,直接调:
| 方法 | 输出格式 | 常用场景 |
|---|---|---|
QRcode::png() | PNG 图片 | 网页直接显示 |
QRcode::svg() | SVG 矢量 | 需要缩放不失真 |
QRcode::eps() | EPS 矢量 | 印刷输出 |
QRcode::text() | 文本矩阵 | 自定义渲染、TCPDF |
png() 参数
QRcode::png($text, $outfile, $level, $size, $margin, $saveandprint, $back_color, $fore_color)
| 参数 | 默认值 | 说明 |
|---|---|---|
$text | - | 要编码的内容(链接、文本等) |
$outfile | false | 文件保存路径,false 则直接输出到浏览器 |
$level | QR_ECLEVEL_L | 纠错级别 |
$size | 3 | 每个黑点的像素大小 |
$margin | 4 | 二维码周围白边宽度(单位是模块数) |
$saveandprint | false | 是否既保存文件又返回给浏览器 |
$back_color | 0xFFFFFF | 背景色(十六进制,白) |
$fore_color | 0x000000 | 前景色(十六进制,黑) |
svg() 和 eps() 的参数和 png() 差不太多。
纠错级别
四个级别,选哪个取决于你的使用场景:
QR_ECLEVEL_L // 容错约 7% QR_ECLEVEL_M // 容错约 15% QR_ECLEVEL_Q // 容错约 25% QR_ECLEVEL_H // 容错约 30%
级别越高容错越强,但二维码本身也越密集(点更多)。一般用 L 或 M 就够了,除非你想在二维码中间塞个 Logo,那得上 H。
$size 和像素的关系
这个容易搞混。$size 不是最终的图片尺寸,而是每个二维码模块占多少像素。
实际图片大小计算公式:
最终图片尺寸 = (二维码模块数 + 2 × margin) × $size
举个栗子:
QRcode::png('https://example.com', false, QR_ECLEVEL_L, 6, 0);https://example.com总共 19 个字符,L 级纠错 → 对应 Version 2,矩阵是 25×25 模块$size = 6,$margin = 0- 最终图片: 25 × 6 = 150×150 像素
不同 $size 值的直观对比(25×25 模块,margin=0):
| $size | 最终尺寸 |
|---|---|
| 1 | 25×25(太小了,扫不出) |
| 3 | 75×75(够用) |
| 6 | 150×150(清晰) |
| 10 | 250×250(大) |
建议
$size别太小,至少 3 以上,不然有的手机扫不出来。
配置文件 qrconfig.php
qrconfig.php 里有几个配置项可以根据情况调一下:
define('QR_CACHEABLE', true); // 是否启用缓存,建议开着
define('QR_FIND_BEST_MASK', true); // 查找最佳掩码,开着重质量,关着重速度
define('QR_FIND_FROM_RANDOM', false); // 是否随机检测掩码
define('QR_DEFAULT_MASK', 2); // QR_FIND_BEST_MASK 为 false 时用的默认掩码
define('QR_PNG_MAXIMUM_SIZE', 1024); // PNG 最大允许尺寸如果你对生成速度有要求,把 QR_FIND_BEST_MASK 设成 false,能快不少,但二维码质量会稍微差一点。
几个实际场景
直接显示到网页
<?php
require_once 'QRcode.php';
header('Content-Type: image/png');
QRcode::png('https://www.example.com', false, QR_ECLEVEL_M, 5);保存到文件
QRcode::png('https://www.example.com', 'qrcode.png', QR_ECLEVEL_M, 5);生成带颜色的二维码
// 白底蓝码
QRcode::png('https://www.example.com', false, QR_ECLEVEL_M, 5, 2, false, 0xFFFFFF, 0x0033CC);生成 SVG 嵌入 HTML
ob_start();
QRcode::svg('https://www.example.com', false, QR_ECLEVEL_M, 3, 2);
$svg = ob_get_clean();
echo '<div style="width:300px">' . $svg . '</div>';生成 TCPDF 用的二维码
require_once 'QRcode.php';
require_once 'tcpdf/tcpdf.php';
$barcode = QRtools::tcpdfBarcodeArray('https://www.example.com', 'QR,M');
// 把 $barcode 传给 TCPDF 的 write2DBarcode 方法可能遇到的报错
- "Could not find/open font":把
qrcode/font目录放对位置就行 - PNG 生成失败:检查 GD 库装了没有,PHP 自带的
- "wrong version":内容太长,版本号溢出,试着提高纠错级别或者拆开内容
总结一下
- 单文件引入,不依赖扩展
- 支持 PNG/SVG/EPS/文本 多种输出
- 参数简单,
QRcode::png()一行搞定大多数场景 - 有缓存机制,多次生成不会反复计算
- 写接口直接把图片流返回,省事
附下载链接: https://pan.baidu.com/s/1zwgMLInX_lAtpGpqLbgP5g?pwd=453s
CentOS 7 停止维护后,宝塔面板安装 PHP fileinfo 扩展报错 “C compiler cannot create executables”。本文详细分析原因,并提供一套完整、安全的解决方法,包括切换阿里云 Vault 源、修复 GPG 密钥缺失、安装编译器,最终成功安装扩展。
本文详细介绍两种让 PhpStudy 在 Windows 开机后自动启动的方法,包括使用启动文件夹批处理脚本和直接注册 Apache、MySQL 为系统服务,助你减少重复操作,提高开发效率。
本文详细介绍如何在不重装 PHPStudy 的情况下,通过修改 Apache/Nginx、MySQL、PHP 配置文件实现网站搬家。针对 MySQL 数据目录错误、PHP 扩展路径错误等常见问题,提供快速定位与解决方法,帮助开发者轻松迁移开发环境。
Thinkphp8编辑方法携带id参数出现方法参数错误:id的问题,主要是因为地址上没有携带id参数造成的,我们可以通过修改在 config/route.php 中添加配置项:// 操作方法参数绑定来源: route仅路由参数, param所有请求参数(GET+POST+路由), 默认仅GET+路由 // 设置为param以支持POST请求中的参数绑定到控制器方法参数(如: edit($id
authRule::destroy(['id'=>$id]) 和平时用的 delete 删除有什么区别
在 Windows 11 下,Composer 的安装看似简单(有安装包),但很多开发者(尤其是使用 WAMP、XAMPP 或 PHPStudy 集成环境的用户)常因路径未自动添加或权限问题而困扰。一、 安装前的核心准备:路径与环境变量您提到的“路径有关”的问题,90% 发生在这一步。Composer 运行依赖 PHP,如果系统找不到 PHP,Composer 就无法工作。确定 PHP 路径如果您