PHP生成二维码【endroid/qr-code 4.x+】

本文详细介绍了如何在PHP项目中使用endroid/qr-code库生成二维码,包括安装方法、Builder生成器和自定义选项,以及不同输出格式的示例。
摘要由CSDN通过智能技术生成

网上找的大部分是4.0版本(endroid/qr-code)以下的。很多方法根本就用不了,这个是我找资料整理的,大家可以参考下,下面代码是可以直接使用的。官网地扯:endroid/qr-code - Packagist

注意:1.使用该扩展前,先确认其 PHP 版本要求,endroid/qr-code 4.x 需要 PHP 版本 7.4+

2.使用前需要检查下是否启用了 gd2 扩展,对于 endroid/qr-code 版本选择,参考扩展包文档对 PHP 版本的要求

一、安装扩展

执行 composer 命令安装 endroid/qr-code 扩展

 composer require endroid/qr-code

二、生成二维码

1.使用 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;


$result = Builder::create()
->writer(new PngWriter())
->writerOptions([])
// 二维码文本
->data('https://www.itqaq.com')
// 内容编码
->encoding(new Encoding('UTF-8'))
// 容错等级(越高二维码越密集)
->errorCorrectionLevel(new ErrorCorrectionLevelHigh())
// 二维码内容区域大小
->size(300)
// 二维码内容外边距大小
->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();

2.不使用 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.itqaq.com')
// 内容编码
->setEncoding(new Encoding('UTF-8'))
// 容错等级
->setErrorCorrectionLevel(new ErrorCorrectionLevelLow())
// 内容区域大小
->setSize(300)
// 内容区域外边距
->setMargin(10)
// 内容圆形块尺寸模型
->setRoundBlockSizeMode(new RoundBlockSizeModeMargin())
// 内容颜色
->setForegroundColor(new Color(0, 0, 0))
// 背景颜色
->setBackgroundColor(new Color(255, 255, 255));
// 二维码logo logo
$logo = Logo::create(__DIR__ . '/3.png')
->setResizeToWidth(50);
// 二维码下方文字 label
$label = Label::create('Label')
->setTextColor(new Color(255, 0, 0));
// 生成二维码数据对象(后面两个参数都是可选的)
$result = $writer->write($qrCode, $logo, $label);

3.实际开发中,使用最多的是根据一串普通文本生成字符串,所以我将代码做了简化,方便以后快速使用 ,这也是本人用的最多的方式

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


$qrCode = QrCode::create('https://www.itqaq.com')
// 内容编码
->setEncoding(new Encoding('UTF-8'))
// 内容区域大小
->setSize(200)
// 内容区域外边距
->setMargin(10);
// 生成二维码数据对象
$result = (new PngWriter)->write($qrCode);

4.最后整理下输出格式,有三种输出二维码的方式,根据项目场景选择合适的方式即可

// 1.直接输出在浏览器中
ob_end_clean(); //处理在TP框架中显示乱码问题
header('Content-Type: ' . $result->getMimeType());
echo $result->getString();
// 2.将二维码图片保存到本地服务器
$result->saveToFile(__DIR__ . '/qrcode.png');
// 3.返回 base64 格式的图片
$dataUri = $result->getDataUri();
echo "<img src='{$dataUri}'>";

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值