ThinkPHP生成二维码(可自定义设置LOGO)

  • 2019 年 12 月 27 日
  • 笔记

基于ThinkPHP框架生成二维码,可自定义logo及其他参数,方法简单易懂,使用composer安装扩展类,区区数十行代码便可以实现功能。可以自定义二维码大小、写入文件的后缀名、二维码内容相对于整张图片的外边距、编码类型、容错率、前景色、背景色等参数。

一、使用composer安装扩展类

composer安装教程:composer系列之介绍及安装

安装扩展类库:

endroid/qr-code

命令:

composer endroid/qr-code

二、代码


/**

 * 二维码生成

 * @param $link

 * @return string|thinkresponseJson

 * @throws EndroidQrCodeExceptionInvalidPathException

 * @throws EndroidQrCodeExceptionInvalidWriterException

 */

public function qrCode($link)

{

//设置路径

if(!$link) {

return json([ 'code' => 100, 'msg' => '缺失参数' ]);

}

//加密生成文件名称

$sha1 = sha1($link);

//设置保存目录

$qrCode_dir = './code/';

//判断目录是否存在

if(!file_exists($qrCode_dir)) mkdir($qrCode_dir, 0777, true);

//拼接完整文件名称

$file_name = $qrCode_dir . $sha1 . '.png';

//设置头

header('Content-Type: image/png');

if(!is_file($file_name)) {

$qrCode = new QrCode($link);

$qrCode->setSize(120); //二维码大小

$qrCode->setWriterByName('png'); //写入文件的后缀名

$qrCode->setMargin(5); //二维码内容相对于整张图片的外边距

$qrCode->setEncoding('UTF-8'); //编码类型

$qrCode->setErrorCorrectionLevel(new ErrorCorrectionLevel(ErrorCorrectionLevel::HIGH));   // 容错率

$qrCode->setForegroundColor([ 'r' => 0, 'g' => 0, 'b' => 0, 'a' => 0 ]); //前景色

$qrCode->setBackgroundColor([ 'r' => 255, 'g' => 255, 'b' => 255, 'a' => 0 ]); //背景色

//写入logo

$logoUrl = './code/_logo.png';

$qrCode->setLogoPath($logoUrl);

$qrCode->setLogoWidth(30);

//创建片

$qrCode->writeFile($file_name);

}

return substr($file_name, 1);

}