您的当前位置:首页>全部文章>文章详情

【PHP】TP使用endroid/qr-code生成二维码

CrazyPanda发表于:2024-03-08 17:54:18浏览:354次TAG:

前言

TP版本:TP6.0

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

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

1、 安装扩展

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

composer require endroid/qr-code

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

生成二维码,直接返回前端

/**
 * 生成二维码图片:url会直接跳转(url必须带有http,否则不会跳转;其他情况会生成带有参数的二维码)
 * @param $data
 * @param string $label  图片上可添加的其他文案
 * @param int $size
 * @param int $margin
 * @return string
 */
public static function generateQrCode($data, $label = '', $size = 300, $margin = 10)
{
    $qr = Builder::create()
        ->writer(new PngWriter())
        ->writerOptions([])
        ->data($data)
        ->encoding(new Encoding('UTF-8'))
        ->errorCorrectionLevel(new ErrorCorrectionLevelHigh())
        ->size($size)
        ->margin($margin)
        ->roundBlockSizeMode(new RoundBlockSizeModeMargin());
    if (!empty($label)) {
        $qr->labelText($label)
            ->labelFont(new NotoSans(20))
            ->labelAlignment(new LabelAlignmentCenter());
    }
    return $qr->build()->getDataUri();
}

生成二维码图片并保存本地

生成二维码图片,并保存到指定路径,可跟进业务对保存到指定路径的图片进行其他处理

/**
 * @param $data
 * @param $path:要保存图片到某一个路径,路径可自定义一个有权限的路径
 * @param int $size
 * @param int $margin
 * @param string $label 
 * @return array|string|null
 * @author anxiaowen
 */
public static function savePath($data, $path, $label = '', $size = 300, $margin = 10)
{
    $qr = Builder::create()
        ->writer(new PngWriter())
        ->writerOptions([])
        ->data($data)
        ->encoding(new Encoding('UTF-8'))
        ->errorCorrectionLevel(new ErrorCorrectionLevelHigh())
        ->size($size)
        ->margin($margin)
        ->roundBlockSizeMode(new RoundBlockSizeModeMargin());
    if (!empty($label)) {
        $qr->labelText($label)
            ->labelFont(new NotoSans(20))
            ->labelAlignment(new LabelAlignmentCenter());
    }
    $result = $qr->build();
    $result->saveToFile($path);
    // todo 此时已生成图片在指定的路径;根据自身业务对  保存到 $path的图片处理
}

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

输出二维码

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

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

// 返回 base64 格式的图片
$dataUri = $result->getDataUri();
echo "<img src='{$dataUri}'>";


猜你喜欢

【PHP】Composer配置中国全量镜像
查看当前的镜像源:composer config -g -l repo.packagist切换国内镜像阿里云 composer&nbsp;config&nbsp;-g&nbsp;repos.packagist&nbsp;composer&nbsp;https://mirrors.aliyun.com/composer/腾讯云 composer&nbsp;config&nbsp;-g&nbsp;repos.packagist&nbsp;composer&nbsp;https://mirrors.c
发表于:2023-12-18 浏览:400 TAG:
【PHP】php curl怎么使用get和post方法
hp curl使用post的方法:首先启动一个curl会话;然后对认证证书来源进行检查;接着从证书中检查ssl加密算法是否存在;最后以post方式请求https协议接口即可。本文操作环境:Windows7系统、PHP7.1版,DELL G3电脑php curl怎么使用get和post方法?PHP:CURL分别以GET、POST方式请求HTTPS/http协议接口apicurl以GET方式请求https协议接口function&nbsp;curl_get_https($url){ &nbsp;&amp;
发表于:2024-03-19 浏览:320 TAG:
【PHP】php中实现3DES算法(ECB加密模式PKCS5Padding填充)
讲道理,一提到3DES算法,首先想到的是要和java做交互了==现在3DES已经渐渐被抛弃了,尤其是ECB加密模式使用的更少了,但是没办法,业务需要,合作方用的是他,你头再铁也不能怎样,那就扒扒文档咯网上完整的php实现以经不多了,CBC加密模式居多,所以我参考了好几篇文章,整理了一个class出来,共享上来,避免后来人踩坑感谢前人的整理总结:PHP版3DES加解密类更新成PKCS5填充模式 (http://blog.163.com/hui\_san/blog/static/5710286720
发表于:2024-01-04 浏览:304 TAG:
【PHP】php设计问答系统有哪些
php设计问答系统有Stack Overflow、Quora、Yahoo Answers、Quizzr等等。详细介绍:1、Stack Overflow,允许用户提问、回答问题,并通过投票机制评估答案的质量,提供了丰富的标签和搜索功能,使用户能够快速找到相关问题和答案;2、Quora,提供了丰富的社交功能,如关注话题、关注用户和私信交流等;3、Yahoo Answers等等。本教程操作系统:windows10系统、PHP8.1.3版本、Dell G3电脑。PHP设计问答系统是一种基于PH
发表于:2023-12-04 浏览:269 TAG:
【PHP】怎么取出php数组的前几个元素
&nbsp; &nbsp; &nbsp; &nbsp; 取出php数组的前几个元素的方法有使用array_slice()函数、使用array_splice()函数、使用循环遍历、使用array_slice()函数和array_values()函数等。详细介绍:1、使用array_slice()函数,可以从数组中取出指定范围的元素,并返回一个新的数组,可以通过设置第三个参数来指定需要取出的元素个数等等。PHP是一种广泛使用的编程语言,它提供了许多强大的数组操作函数和方法。在PHP中,我们可
发表于:2023-12-14 浏览:399 TAG:
【PHP】php二维数组排序
&nbsp; &nbsp; &nbsp; &nbsp; PHP作为一种常用的Web编程语言,在不同的应用场景下,对数组的处理是不可避免的。而对于数组排序,也是开发时经常面对的一个问题。本文将介绍如何对二维数组进行排序。一、二维数组排序概述在PHP中,二维数组是由多个一维数组链接而成的复合数组,也就是说,它不仅有行的概念,还有列的概念。当需要对二维数组进行排序时,通常需要对其中某一列进行排序。这时候需要使用PHP提供的函数来进行排序。二、对二维数组进行排序的方法1.使用usort()函数u
发表于:2023-12-14 浏览:386 TAG:
【PHP】thinkphp用db还是模型
在使用thinkphp框架进行开发时,开发者常常会面临一个选择:使用数据库操作(db)还是模型(model)。数据库操作是直接对数据库进行操作,可以直接写SQL语句,操作更加灵活。模型则是通过封装操作数据库,提供了更加便于使用的增删改查方法。那么,究竟该选择使用哪种方式呢?下面就让我们来探讨一下。一、使用数据库操作1.优点(1)灵活:使用数据库操作可以灵活地编写SQL语句,可以通过拼接字符串等方式完成各种复杂的查询操作。(2)效率高:数据库操作直接面向数据库,执行起来速度比较快。(3)适用面广:
发表于:2024-03-15 浏览:318 TAG:
【PHP】支付宝第三方应用获取用户授权信息
支付宝服务商可创建第三方应用,一个第三方应用可绑定多个商家应用,商家应用绑定成功后会获取一个app_auth_token,授权令牌 app_auth_token 在没有重新授权、取消授权或刷新授权的情况下,永久有效。业务需要,要获取用户的user_id/open_id,1. 获取auth_code拼接授权urlhttps://openauth.alipay.com/oauth2/publicAppAuthorize.htm?app_id=APPID&amp;scope=auth_base&amp;am
发表于:2024-02-28 浏览:361 TAG:
【PHP】TP使用Intervention\Image在图片上绘制矩形、文字
1. 在图片上绘制矩形use&nbsp;Intervention\Image\ImageManagerStatic&nbsp;as&nbsp;Image; &nbsp; public&nbsp;function&nbsp;drawRectangle() { &nbsp;&nbsp;&nbsp;&nbsp;$image&nbsp;=&nbsp;Image::make(&#39;path/to/your/image.jpg&#39;);&nbsp;//&nbsp;替换为你的图片路径 &nbsp; &amp;
发表于:2024-04-12 浏览:374 TAG:
【PHP】PHP框架在敏捷开发和大型项目中的应用
hp 框架在敏捷开发和大型项目中应用广泛,提供敏捷性、可扩展性和安全性等优势。例如,在电子商务网站中,laravel 框架可快速创建原型、处理复杂业务逻辑、确保安全和扩展功能。通过利用预定义的组件和设计模式,php 框架为开发人员构建可扩展且维护良好的应用程序提供了便利。PHP框架在敏捷开发和大型项目中的应用PHP框架是用于构建web应用程序的强大工具。它们提供了一套预定义的组件和设计模式,可以简化和加快开发过程。在敏捷开发和大型项目中,使用PHP框架可以带来以下优势:敏捷性:框架允许开发人员
发表于:2024-05-30 浏览:340 TAG: