一:下载phpqrcode类文件
1.下载地址:https://sourceforge.net/projects/phpqrcode/
2.PHP环境必须开启支持GD2扩展库支持(一般情况下都是开启状态)
3.下载解压后,我们只需要“phpqrcode.php”文件就行了,其它的都删除。
4.然后把该文件放入“extend”文件夹下。
5、还要一个步骤,因为thinkphp6取消了vendor的引用形式,我们使用第三方类库的话,得去入口文件index.php里添加代码:
include __DIR__.'/../extend/phpQrcode/phpqrcode.php';如图所示:
6、ok,开始进行应该有的操作了,去你想生成二维码的方法里写代码吧,这里我测试时放在了这里,方便查看。
6.1:这里是生成链接的二维码:
function index(){
// ob_start();
$value = 'https://www.alvinxiao.com'; //二维码内容
$errorCorrectionLevel = 'L'; //容错级别
$matrixPointSize = 5; //生成图片大小
$imgNmae = time().mt_rand(11, 30);
//获取根路径
$root_dir=public_path().'public/';
$filename='uploads/qrcodeImg/' . date("Y-m-d");
if(!is_dir($root_dir.$filename)){
mkdir($root_dir. $filename , 0777, true);
}
//生成二维码图片
$QrImgname = $root_dir.$filename.'/'.$imgNmae.'.png';
\QRcode::png($value,$QrImgname , $errorCorrectionLevel, $matrixPointSize, 2);
$QR = $QrImgname; //已经生成的原始二维码图片文件
$QR = imagecreatefromstring(file_get_contents($QR));
//输出图片
imagepng($QR, $QrImgname);
imagedestroy($QR);
View::assign(['QRimg'=>'/'.$filename.'/'.$imgNmae.".png"]);
return view('index');
}
html页面格式是这样【不要在意,这页面是在测试】
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<img src="{$QRimg}">
</body>
</html>
ok,然后生成的二维码图片如图:
6.2:接下来是生成logo或图片的二维码:
function createLogoQrImg(){
$value = 'https://www.alvinxiao.com'; //二维码内容
$errorCorrectionLevel = 'H'; //容错级别
$matrixPointSize = 6; //生成图片大小
$imgNmae = time().mt_rand(11, 30);
//获取根路径
$root_dir=public_path().'public/';
$filename='uploads/qrcodeImg/' . date("Y-m-d");
if(!is_dir($root_dir.$filename)){
mkdir($root_dir. $filename , 0777, true);
}
//生成二维码图片
$QrImgname = $root_dir.$filename.'/'.$imgNmae.'.png';
\QRcode::png($value,$QrImgname , $errorCorrectionLevel, $matrixPointSize, 2);
$logo = $root_dir.'uploads/mylogo.png'; //准备好的logo图片
$QR = $QrImgname; //已经生成的原始二维码图
if (file_exists($logo)) {
$QR = imagecreatefromstring(file_get_contents($QR)); //目标图象连接资源。
$logo = imagecreatefromstring(file_get_contents($logo)); //源图象连接资源。
$QR_width = imagesx($QR); //二维码图片宽度
$QR_height = imagesy($QR); //二维码图片高度
$logo_width = imagesx($logo); //logo图片宽度
$logo_height = imagesy($logo); //logo图片高度
$logo_qr_width = $QR_width / 4; //组合之后logo的宽度(占二维码的1/5)
$scale = $logo_width/$logo_qr_width; //logo的宽度缩放比(本身宽度/组合后的宽度)
$logo_qr_height = $logo_height/$scale; //组合之后logo的高度
$from_width = ($QR_width - $logo_qr_width) / 2; //组合之后logo左上角所在坐标点
//重新组合图片并调整大小
/*
* imagecopyresampled() 将一幅图像(源图象)中的一块正方形区域拷贝到另一个图像中
*/
imagecopyresampled($QR, $logo, $from_width, $from_width, 0, 0, $logo_qr_width,$logo_qr_height, $logo_width, $logo_height);
}
//输出图片
imagepng($QR, $QrImgname);
imagedestroy($QR);
imagedestroy($logo);
$logoQr='/'.$filename.'/'.$imgNmae.'.png';
return $logoQr;
}
然后调用这个方法就行了,当然,这里得准备一张logo,图片都行,但是不要太大
文件形式为:
最后生成的二维码为:
这是制作logo二维码,放在中间位置的
function thumb(){
header('Content-type: image/png');
$width = 70; //logo压缩为宽70
$height = 70;
$value = 'https://www.gzjerryli.cn'; //二维码内容
$errorCorrectionLevel = 'H'; //容错级别
$matrixPointSize = 6; //生成图片大小
$imgNmae = time().mt_rand(11, 30);
//获取根路径
$root_dir=public_path().'public/';
$filename='uploads/qrcodeImg/' . date("Y-m-d");
if(!is_dir($root_dir.$filename)){
mkdir($root_dir. $filename , 0777, true);
}
//生成二维码图片
$QrImgname = $root_dir.$filename.'/'.$imgNmae.'.png';
\QRcode::png($value,$QrImgname , $errorCorrectionLevel, $matrixPointSize, 2);
$logos = $root_dir.'/storage/image/20200311/jerryli.jpg';//$root_dir.'uploads/mylogo.png'; //准备好的logo图片
$QR = $QrImgname; //已经生成的原始二维码图
// 将头像文件缩小 并放置到二维码当中
list($s_width,$s_height) = getimagesize($logos);
list($d_width,$d_height) = getimagesize($QR);
// 将图片裁减为指定的大小 50*50
$blank = imagecreatetruecolor($width,$height);
$logo = imagecreatefromstring(file_get_contents($logos));
imagecopyresampled($blank,$logo,0,0,0,0,$width,$height,$s_width,$s_height);
$qrimage = imagecreatefromstring(file_get_contents($QR));
// 获取二维码的宽高 算出比例 放在图片的中间
$m_width = round(($d_width - $width)/2,0);
$m_height= round(($d_height- $height)/2,0);
imagecopymerge($qrimage,$blank,$m_width,$m_height,0,0,$width,$height,100);
// 合成新图像
imagepng($qrimage,$QR);
imagedestroy($qrimage);
imagedestroy($blank);
$logoQr='/'.$filename.'/'.$imgNmae.'.png';
return $logoQr;
}