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

文章目录

        • 1. 前言
        • 2. 安装扩展
        • 3. 生成二维码
        • 4. 输出二维码
        • 5. 原文

1. 前言

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

Packagist 传送地址: https://packagist.org/packages/endroid/qr-code

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

2. 安装扩展

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

composer require endroid/qr-code

会生成如下目录结构内容

├─vendor
│  ├─autoload.php
│  ├─ ...
├─composer.json
├─composer.lock

如果当前项目架构没有基于任何框架,只需要引入 composer 的自动加载文件即可

如果当前项目是基于 ThinkPHP,Laravel 等主流框架,这些框架都支持 composer,执行安装扩展包命令后可以直接使用

require 'vendor/autoload.php';
3. 生成二维码

使用 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();

不使用 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);

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

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. 输出二维码

以下是三种输出二维码的方式,根据项目场景选择合适的方式即可

// 直接输出在浏览器中
// ob_end_clean(); //处理在TP框架中显示乱码问题
// header('Content-Type: ' . $result->getMimeType());
// echo $result->getString();

// 将二维码图片保存到本地服务器
// $result->saveToFile(__DIR__ . '/qrcode.png');

// 返回 base64 格式的图片
$dataUri = $result->getDataUri();
echo "";
5. 原文

博客主站: https://www.itqaq.com/index/488.html

你可能感兴趣的:(PHP,Composer,php,json,开发语言)