【PHP】TP使用endroid/qr-code生成二维码
CrazyPanda发表于:2024-03-08 17:54:18浏览:354次
前言
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 config -g repos.packagist composer https://mirrors.aliyun.com/composer/腾讯云 composer config -g repos.packagist composer https://mirrors.c
- 【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 curl_get_https($url){ &
- 【PHP】php中实现3DES算法(ECB加密模式PKCS5Padding填充)
- 讲道理,一提到3DES算法,首先想到的是要和java做交互了==现在3DES已经渐渐被抛弃了,尤其是ECB加密模式使用的更少了,但是没办法,业务需要,合作方用的是他,你头再铁也不能怎样,那就扒扒文档咯网上完整的php实现以经不多了,CBC加密模式居多,所以我参考了好几篇文章,整理了一个class出来,共享上来,避免后来人踩坑感谢前人的整理总结:PHP版3DES加解密类更新成PKCS5填充模式 (http://blog.163.com/hui\_san/blog/static/5710286720
- 【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
- 【PHP】怎么取出php数组的前几个元素
- 取出php数组的前几个元素的方法有使用array_slice()函数、使用array_splice()函数、使用循环遍历、使用array_slice()函数和array_values()函数等。详细介绍:1、使用array_slice()函数,可以从数组中取出指定范围的元素,并返回一个新的数组,可以通过设置第三个参数来指定需要取出的元素个数等等。PHP是一种广泛使用的编程语言,它提供了许多强大的数组操作函数和方法。在PHP中,我们可
- 【PHP】php二维数组排序
- PHP作为一种常用的Web编程语言,在不同的应用场景下,对数组的处理是不可避免的。而对于数组排序,也是开发时经常面对的一个问题。本文将介绍如何对二维数组进行排序。一、二维数组排序概述在PHP中,二维数组是由多个一维数组链接而成的复合数组,也就是说,它不仅有行的概念,还有列的概念。当需要对二维数组进行排序时,通常需要对其中某一列进行排序。这时候需要使用PHP提供的函数来进行排序。二、对二维数组进行排序的方法1.使用usort()函数u
- 【PHP】thinkphp用db还是模型
- 在使用thinkphp框架进行开发时,开发者常常会面临一个选择:使用数据库操作(db)还是模型(model)。数据库操作是直接对数据库进行操作,可以直接写SQL语句,操作更加灵活。模型则是通过封装操作数据库,提供了更加便于使用的增删改查方法。那么,究竟该选择使用哪种方式呢?下面就让我们来探讨一下。一、使用数据库操作1.优点(1)灵活:使用数据库操作可以灵活地编写SQL语句,可以通过拼接字符串等方式完成各种复杂的查询操作。(2)效率高:数据库操作直接面向数据库,执行起来速度比较快。(3)适用面广:
- 【PHP】支付宝第三方应用获取用户授权信息
- 支付宝服务商可创建第三方应用,一个第三方应用可绑定多个商家应用,商家应用绑定成功后会获取一个app_auth_token,授权令牌 app_auth_token 在没有重新授权、取消授权或刷新授权的情况下,永久有效。业务需要,要获取用户的user_id/open_id,1. 获取auth_code拼接授权urlhttps://openauth.alipay.com/oauth2/publicAppAuthorize.htm?app_id=APPID&scope=auth_base&am
栏目分类全部>
推荐文章
- 【PHP】php将字符串拆分成数组有哪些方法
- 【PHP】thinkphp5.1+workman+jsonRpc
- 【ElasticSearch】ElasticSearch | ES常用查询命令汇总
- 【Redis】Redis下载安装
- 【Python】Python实现多继承的方法和关注点
- 【PHP】php怎么去数组中的指定几条
- 【PHP】PHP设计模式大全与应用场景
- 【Vue】Antd Pro Vue的使用(四)—— 打包发布到站点二级目录,生产环境请求接口配置
- 【PHP】PHP8.1新特性大讲解之readonly properties只读属性
- 【Python】利用Python和WebDriver扩展自动化处理网页的滑动验证码