PHP生成二维码

简介: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的扩展就已经完成了。有什么不对的可以在我公众号留言哦

如果需要生产二维码请进入我的博客官网体验【在线免费生成二维码

有遗漏或者不对的可以在我的公众号留言哦

编程经验共享公众号二维码

编程经验共享公众号二维码
更多内容关注公众号
Copyright © 2021 编程经验共享 赣ICP备2021010401号-1