使用 composer 安装 endroid/qrcode:

1
2
3
4
5
由于endroid/qrcode不在维护,可安装以下
composer require endroid/qr-code

安装个版本,进入网站查找
https://packagist.org/packages/endroid/qrcode

示例代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
<?php
/**
* ============================================================================
* ----------------------------------------------------------------------------
* 二维码生成
* ----------------------------------------------------------------------------
* ============================================================================
*/
namespace app\common\utils;

use Endroid\QrCode\ErrorCorrectionLevel;
use Endroid\QrCode\QrCode as QrCodePackage;

class QrCode
{
/**
* 获取二维码
* php7.1 最新版本composer安装:composer require endroid/qr-code:3.5.9
* @setSize - 二维码大小 px
* @setWriterByName - 写入文件的后缀名
* @setMargin - 二维码内容相对于整张图片的外边距
* @setEncoding - 编码类型
* @setErrorCorrectionLevel - 容错等级,分为L、M、Q、H四级
* @setForegroundColor - 前景色
* @setBackgroundColor - 背景色
* @setLabel - 二维码标签
* @setLogoPath - 二维码logo路径
* @setLogoWidth - 二维码logo大小 px
*
* @pathUrl 保存的路径
* @logo 二维码中间logo图,必须在本地服务器内
* @setLogo 是否开启二维码中放logo [false否 true是]
* @link 跳转链接
* @setSize 二维码大小 px
* @logoSize logo大小 px
* @delFile 是否删除文件
*/
public static function getQrCode($pathUrl = "",$link = '',$setSize = 300,$setLogo = false,$logo = "",$logoSize = 90,$delFile = true){
//判断图片是否在本地服务器上,不存在则不可设置
if(!file_exists($logo) && $setLogo){
return ['code'=>500,'msg'=>'设置二维码中的logo图路径不正确'];
}

//基础配置
$config = [
'set_log' => $setLogo,
'link' => $link,//跳转链接
'set_size' => $setSize,//二维码大小 px
'path' => $pathUrl ? : root_path() .'uploads/qrcode/',//保存路径(绝对路径),root_path()属于tp6 ,tp5请用env('root_path')
'logo_width' => $logoSize,
'logo_path' => $logo
];

$qrCode = new QrCodePackage($config['link']);
// 容错率
$qrCode->setErrorCorrectionLevel(new ErrorCorrectionLevel(ErrorCorrectionLevel::HIGH));
//转绝对路径
$logo_path = str_replace(request()->domain().'/',root_path(),$config['logo_path']);
if($config['set_log']){
$qrCode->setLogoPath($logo_path);
$qrCode->setLogoWidth($config['logo_width']);
}

//随机文件名
$name = sha1(uniqid());
if (!file_exists($config['path'])) mkdir($config['path'], 0777, true);
$path = $config['path'] .$name . '.png';
// header('Content-Type: image/png');
header('Content-Type: '.$qrCode->getContentType());
if (is_file($path)) {
// echo file_get_contents($path);//显示二维码
return ['code'=>200,'url'=>str_replace(root_path(),request()->domain().'/',$path)];
} else {
$qrCode->setSize($config['set_size']);
//生成文件
$qrCode->writeFile($path);
return ['code'=>200,'url'=>str_replace(root_path(),request()->domain().'/',$path)];
// echo $qrCode->writeString();//显示二维码
}

//@去操作这张图片
//@删除文件
if($delFile){
unlink($path);
}
die;
}
}

二维码相关参数

参数名描述
setSize二维码大小(单位:px)
setWriterByName写入文件的后缀名
setMargin二维码内容相对于整张图片的外边距
setEncoding编码类型
setErrorCorrectionLevel容错等级,分为L、M、Q、H四级
setForegroundColor前景色
setBackgroundColor背景色
setLabel二维码标签
setLogoPath二维码logo路径
setLogoWidth二维码logo大小 单位:px