基于ThinkPHP框架生成二维码,可自定义logo及其他参数,方法简单易懂,使用composer安装扩展类,区区数十行代码便可以实现功能。可以自定义二维码大小、写入文件的后缀名、二维码内容相对于整张图片的外边距、编码类型、容错率、前景色、背景色等参数。
一、使用composer安装扩展类
composer安装教程:composer系列之介绍及安装
安装扩展类库:
代码语言:javascript复制endroid/qr-code
命令:
代码语言:javascript复制composer endroid/qr-code
二、代码
代码语言:javascript复制
/**
* 二维码生成
* @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);
}