兼容 PHP 5.3~5.6 的老牌二维码生成库,不依赖扩展和 Composer

      发布在:后端技术      评论:0 条评论

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-要编码的内容(链接、文本等)
$outfilefalse文件保存路径,false 则直接输出到浏览器
$levelQR_ECLEVEL_L纠错级别
$size3每个黑点的像素大小
$margin4二维码周围白边宽度(单位是模块数)
$saveandprintfalse是否既保存文件又返回给浏览器
$back_color0xFFFFFF背景色(十六进制,白)
$fore_color0x000000前景色(十六进制,黑)

svg() 和 eps() 的参数和 png() 差不太多。

纠错级别

四个级别,选哪个取决于你的使用场景:

QR_ECLEVEL_L   // 容错约 7%
QR_ECLEVEL_M   // 容错约 15%
QR_ECLEVEL_Q   // 容错约 25%
QR_ECLEVEL_H   // 容错约 30%

级别越高容错越强,但二维码本身也越密集(点更多)。一般用 LM 就够了,除非你想在二维码中间塞个 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最终尺寸
125×25(太小了,扫不出)
375×75(够用)
6150×150(清晰)
10250×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 路径如果您

热门推荐