利用endroid/qr-code 4.x扩展实现PHP二维码生成与应用

2024-12-17 栏目:技术园地 查看:188次

在当今数字化时代,二维码的应用极为广泛,无论是商业推广、信息传递还是用户交互,都离不开二维码的身影。对于PHP开发者而言,掌握如何生成二维码是一项非常实用的技能。本文将详细介绍如何使用endroid/qr-code 4.x扩展在PHP中生成二维码,涵盖从环境准备到实际应用的全过程。

1. 扩展概述

endroid/qr-code是一个功能强大的PHP扩展,用于生成二维码图像。它提供了丰富的配置选项,使开发者能够根据具体需求定制二维码的样式、内容和输出方式。该扩展支持多种格式的输出,如PNG、JPEG等,并且能够轻松地集成到各种PHP项目中,无论是基于框架的项目还是原生PHP项目。

2. 环境准备

在使用endroid/qr-code 4.x扩展之前,确保你的PHP环境满足以下要求:

PHP版本:需要PHP 7.4及以上版本。

扩展依赖:检查是否启用了gd2扩展,该扩展用于图像处理,是生成二维码所必需的。

3. 安装扩展

执行以下Composer命令安装endroid/qr-code扩展:

composer require endroid/qr-code

此命令会自动下载并安装扩展及其相关依赖项,并生成相应的目录结构,包括vendor目录,其中包含自动加载文件autoload.php等重要文件。

4. 生成二维码

使用Builder生成器(推荐)

首先引入必要的命名空间:

use Endroid\QrCode\Builder\Builder;
use Endroid\QrCode\Encoding\Encoding;
use Endroid\QrCode\ErrorCorrectionLevel\ErrorCorrectionLevelHigh;
use Endroid\QrCode\Label\Alignment\LabelAlignmentCenter;
use Endroid\QrCode\Label\Font\NotoSans;
use Endroid\QrCode\RoundBlockSizeMode\RoundBlockSizeModeMargin;
use Endroid\QrCode\Writer\PngWriter;

然后使用Builder创建二维码实例:

$result = Builder::create()
    ->writer(new PngWriter())
    ->writerOptions([])
    // 二维码文本,这里设置为指定网址
    ->data('https://www.wdphp.cn')
    // 内容编码为UTF-8
    ->encoding(new Encoding('UTF-8'))
    // 容错等级设为高,二维码会更密集
    ->errorCorrectionLevel(new ErrorCorrectionLevelHigh())
    // 二维码内容区域大小设为300像素
    ->size(300)
    // 二维码内容外边距大小设为10像素
    ->margin(10)
    // 二维码内容圆形块尺寸模型
    ->roundBlockSizeMode(new RoundBlockSizeModeMargin())
    // 二维码中间区域logo图片路径,需根据实际情况修改
    ->logoPath(__DIR__. '/3.png')
    ->logoResizeToWidth(100)
    ->logoResizeToHeight(100)
    // 二维码下方文字
    ->labelText('长按识别二维码')
    ->labelFont(new NotoSans(20))
    ->labelAlignment(new LabelAlignmentCenter())
    // 验证读取器默认禁用
    ->validateResult(false)
    // 执行生成器
    ->build();

不使用Builder生成器

引入相应命名空间:

use Endroid\QrCode\Color\Color;
use Endroid\QrCode\Encoding\Encoding;
use Endroid\QrCode\ErrorCorrectionLevel\ErrorCorrectionLevelLow;
use Endroid\QrCode\QrCode;
use Endroid\QrCode\Label\Label;
use Endroid\QrCode\Logo\Logo;
use Endroid\QrCode\RoundBlockSizeMode\RoundBlockSizeModeMargin;
use Endroid\QrCode\Writer\PngWriter;

创建二维码实例:

$writer = new PngWriter();
$qrCode = QrCode::create('https://www.wdphp.cn')
    // 内容编码
    ->setEncoding(new Encoding('UTF-8'))
    // 容错等级设为低
    ->setErrorCorrectionLevel(new ErrorCorrectionLevelLow())
    // 内容区域大小设为300像素
    ->setSize(300)
    // 内容区域外边距设为10像素
    ->setMargin(10)
    // 内容圆形块尺寸模型
    ->setRoundBlockSizeMode(new RoundBlockSizeModeMargin())
    // 内容颜色设为黑色
    ->setForegroundColor(new Color(0, 0, 0))
    // 背景颜色设为白色
    ->setBackgroundColor(new Color(255, 255, 255));

// 二维码logo,需根据实际情况修改路径
$logo = Logo::create(__DIR__. '/3.png')
    ->setResizeToWidth(50);

// 二维码下方文字,颜色设为红色
$label = Label::create('Label')
    ->setTextColor(new Color(255, 0, 0));

// 生成二维码数据对象
$result = $writer->write($qrCode, $logo, $label);

简化代码示例(常用于根据普通文本生成二维码)

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

$qrCode = QrCode::create('https://www.wdphp.cn')
    // 内容编码
    ->setEncoding(new Encoding('UTF-8'))
    // 内容区域大小设为200像素
    ->setSize(200)
    // 内容区域外边距设为10像素
    ->setMargin(10);

// 生成二维码数据对象
$result = (new PngWriter)->write($qrCode);

5. 输出二维码

根据项目需求,可以选择以下三种方式输出二维码:

直接输出在浏览器中

// 处理在TP框架中显示乱码问题,若不在TP框架中可省略
ob_end_clean();
header('Content-Type: '. $result->getMimeType());
echo $result->getString();

将二维码图片保存到本地服务器

$result->saveToFile(__DIR__. '/qrcode.png');

返回base64格式的图片

$dataUri = $result->getDataUri();
echo "";

6. 注意事项

确保logo图片路径正确且可访问,否则会导致生成二维码失败。

在设置二维码参数时,根据实际应用场景合理调整容错等级、尺寸、外边距等参数,以达到最佳的视觉效果和扫描识别率。

若在项目中使用,特别是在框架环境下,注意处理好命名空间的引入和文件路径的设置,确保代码能够正常运行。

通过以上步骤,开发者可以轻松地在PHP项目中利用endroid/qr-code 4.x扩展生成高质量的二维码,为项目增添更多功能和便利性。无论是用于网站推广、用户交互还是数据传递,二维码都将发挥重要作用。

packagist传送门

https://packagist.org/packages/endroid/qr-code

扫二维码与项目经理沟通

我们在微信上24小时期待你的声音

解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流

郑重申明:WDPHP网络以外的任何单位或个人,不得使用该案例作为工作成功展示!