简介:PHP使用endroid/qr-code生成二维码,支持LOGO设置,支持背景色及二维码颜色更改
最近官网开发了一个网页版在线生成二维码的功能,打算用phpqrcode来生成,查了一下github上最新的版本,发现这个扩展已经有很多年没有更新,也不知道是否支持PHP7或者更高版本。于是我看了一下github上关于qrcode相关的扩展,发现了一个更好用的PHP生成二维码的扩展【endroid/qr-code】,这个扩展支持PNG、SVG、EPS及二进制格式的二维码。
今天我们就来介绍一下这个qr-code扩展吧!如需要在线免费生产二维码的可以进入我的博客官网【在线生成二维码】体验
1. 安装扩展
我们可以使用composer安装扩展,不会安装composer的可以看看官网的安装教程
composer require endroid/qr-code
2. 使用生成器生成二维码
<?php
//引用qrcode的命名空间
use Endroid\QrCode\Builder\Builder;
use Endroid\QrCode\Color\Color;
use Endroid\QrCode\Encoding\Encoding;
use Endroid\QrCode\ErrorCorrectionLevel\ErrorCorrectionLevelHigh;
use Endroid\QrCode\Label\Font\NotoSans;
use Endroid\QrCode\RoundBlockSizeMode\RoundBlockSizeModeMargin;
use Endroid\QrCode\Writer\PngWriter;
//我这里使用的是tp6框架,参数可以通过request获取请求参数
$param = request()->param();
$result = Builder::create()
->writer(new PngWriter()) //图片的格式,一般都是png。也支持svg、pdf等
->data('二维码的内容')
->encoding(new Encoding('UTF-8')) // 设置编码格式
->errorCorrectionLevel(new ErrorCorrectionLevelHigh()) //设置错误级别,级别越改越容易识别
->size(300) //设置二维码的大小,300px*300px
->foregroundColor(new Color($param['color']['r'],$param['color']['g'],$param['color']['b'])) //设置二维码的颜色
->backgroundColor(new Color($param['bg_color']['r'],$param['bg_color']['g'],$param['bg_color']['b'])) //设置二维码的背景色
->margin(10) //设置二维码与边框的距离,10px
->roundBlockSizeMode(new RoundBlockSizeModeMargin());//设置圆角
//在底部添加标签,labelFont可以设置底部标签的字体大小。当然我们还可设置label的字体颜色
if(!empty($param['label'])){
$result = $result->labelText($param['label'])->labelFont(new NotoSans(20));
}
//二维码logo
$file = $request->file('file');
if($file){
$result = $result->logoPath($file->getPathname()) //设置logo路径
->logoResizeToHeight(80) // 设置logo在二维码上的高度
->logoResizeToWidth(80); //设置logo在二维码上的宽度
}
//打包
$buildResult = $result->build();
//输出
echo $buildResult->getString()
注意:最后输出的内容我们可以进行base64加密后再返回给前端。
如果你直接输出二进制的二维码,需要设置header('Content-Type: '.$result->getMimeType());
如果想要保存到本地,可以使用:$buildResult->saveToFile('图片的绝对路径');
3. 不使用生成器
<?php
// 设置关于二维码相关参数
$qrCode = \Endroid\QrCode\QrCode::create('二维码的内容')
->setEncoding(new Encoding('UTF-8'))
->setErrorCorrectionLevel(new \Endroid\QrCode\ErrorCorrectionLevel\ErrorCorrectionLevelLow())
->setSize(300)
->setMargin(10)
->setRoundBlockSizeMode(new \Endroid\QrCode\RoundBlockSizeMode\RoundBlockSizeModeMargin())
->setForegroundColor(new \Endroid\QrCode\Color\Color(0, 0, 0))
->setBackgroundColor(new \Endroid\QrCode\Color\Color(255, 255, 255));
// 设置二维码中间logo相关配置
$logo = \Endroid\QrCode\Logo\Logo::create(__DIR__.'/assets/symfony.png')
->setResizeToWidth(50);
// 设置底部标签相关配置类
$label = \Endroid\QrCode\Label\Label::create('标签')
->setTextColor(new \Endroid\QrCode\Color\Color(255, 0, 0));
//创建图片对象
$writer = new \Endroid\QrCode\Writer\PngWriter();
//将配置信息写入图片对象中
$result = $writer->write($qrCode,$logo,$label);
//校验配置是否有问题,可以不校验
$writer->validateResult($result, '异常时抛出的描述信息');
// 保存为文件
$result->saveToFile(__DIR__.'/qrcode.png');
// 输出二维码
header('Content-Type: '.$result->getMimeType());
echo $result->getString();
到此,这个qrcode的扩展就已经完成了。有什么不对的可以在我公众号留言哦
如果需要生产二维码请进入我的博客官网体验【在线免费生成二维码】
有遗漏或者不对的可以在我的公众号留言哦