PHP QR码生成器:phpqrcode库及替代方案

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

PHP QR码生成器:最佳库概览

QR码已成为现代网络不可或缺的一部分。它们用于快速访问链接、传输联系信息、服务授权甚至支付。如果您使用PHP开发并希望在您的网站上实现QR码生成,您无需重新发明轮子——有一些经过验证的库只需几行代码即可完成此任务。

在本文中,我们将介绍三种流行的解决方案:经典的phpqrcode、现代的endroid/qr-code和轻量级的chillerlan/php-qrcode。您将了解如何安装它们、生成QR码并将其显示在屏幕上或保存到文件中。



1. phpqrcode库(经典方案)

这是最早的PHP QR码生成库之一。它不需要外部依赖,开箱即用,至今仍用于许多遗留项目。主要缺点是不支持现代PSR标准和Composer(尽管可以手动安装)。



安装

从SourceForge下载存档并解压到您的项目文件夹中。引入qrlib.php文件:

require_once 'phpqrcode/qrlib.php';


生成并输出PNG的示例

<?phprequire_once 'phpqrcode/qrlib.php';

// 要编码的数据$text = 'https://pythonlib.ru';

// 保存文件的路径$filename = 'qrcode.png';

// 生成QR码,纠错级别L(7%),尺寸10QRcode::png($text, $filename, QR_ECLEVEL_L, 10, 2);

// 在浏览器中输出图像header('Content-Type: image/png');QRcode::png($text, false, QR_ECLEVEL_L, 10, 2);?>

第二个参数false表示图像直接输出到浏览器,而不是保存到文件。



2. endroid/qr-code库(现代且灵活)

这是Packagist上最流行的解决方案。该库支持PSR-4,易于与任何框架(Laravel、Symfony)集成,并允许自定义颜色、尺寸、边距甚至添加Logo。



通过Composer安装

composer require endroid/qr-code


基本生成示例

<?phprequire 'vendor/autoload.php';

use Endroid\\QrCode\\QrCode;use Endroid\\QrCode\\Writer\\PngWriter;

$qrCode = QrCode::create('https://pythonlib.ru') ->setSize(300) ->setMargin(10);

$writer = new PngWriter();$result = $writer->write($qrCode);

// 在浏览器中输出header('Content-Type: '.$result->getMimeType());echo $result->getString();?>


带Logo的QR码

<?phpuse Endroid\\QrCode\\Logo\\Logo;use Endroid\\QrCode\\Color\\Color;

$logo = Logo::create('path/to/logo.png') ->setResizeToWidth(60);

$qrCode = QrCode::create('https://pythonlib.ru') ->setSize(400) ->setForegroundColor(new Color(0, 123, 255)); // 蓝色

$writer = new PngWriter();$result = $writer->write($qrCode, $logo);

header('Content-Type: image/png');echo $result->getString();?>


3. chillerlan/php-qrcode库(轻量且快速)

如果您需要最小依赖和高性能,这是一个绝佳选择。该库支持所有标准编码模式、掩码和纠错级别。非常适合高负载项目。



安装

composer require chillerlan/php-qrcode


生成示例

<?phprequire 'vendor/autoload.php';

use chillerlan\\QRCode\\QRCode;use chillerlan\\QRCode\\QROptions;

$options = new QROptions([ 'outputType' => QRCode::OUTPUT_IMAGE_PNG, 'eccLevel' => QRCode::ECC_L,

推荐