下载完成后,将phpqrcode文件夹,解压到根目录下的vendor目录下
新建一个路由和控制器。
在控制器中,写入如下代码:
// 生成二维码
public function erweima()
{
header("Content-type:image/png");
// 引入插件(其它原生插件应该也可以这么用)
require "../vendor/phpqrcode/phpqrcode.php";
// 实例化
$qRcode = new \QRcode();
$data = "http://www.baidu.com";//网址或者是文本内容
// 纠错级别:L、M、Q、H
,大概可以理解为二维码黑点的密集度,H最大
$level = 'L';
// 二维码的大小,阿拉伯数字,几都可以
$size = 4;
// 生成的文件名
$qRcode->png($data, false, $level, $size);
$img =ob_get_contents();
ob_end_clean();
$imginfo = 'data:png;base64,' . chunk_split(base64_encode($img));//转base64
return "<img src='{$imginfo}' />";
}
// 参数1
二维码内容,url或者文本,url需要写http/https。
// 参数2
是否生成文件,默认为false,如果为true,该参数需要填写文件路径。如果生成base64,就不需要为true。
// 参数3
纠错级别,四个级别L、M、Q、H。
L容错率为7%;
M容错率为15%;
Q容错率为25%;
L容错率为30%。
利用二维维码的容错率,我们可以将头像放置在生成的二维码图片任何区域。
// 参数4
二维码大小,阿拉伯数字,几都可以,1、10、11都行。
// 参数5
二维码的空白区域,也是阿拉伯数字,默认好像是5,所以写0就没了。
// 参数6
保存并显示。想要传入参数6,则必须在参数2中填写图片保存地址。
ps:次哦,网上各种代码都是各种BUG,废了老大劲才调好……
// 生成二维码-带logo
public function ErweimaLogo()
{
// 生成二维码
header("Content-type:image/png");
require "../vendor/phpqrcode/phpqrcode.php";
$qRcode = new \QRcode();
$data = "http://www.baidu.com";//网址或者是文本内容
// 纠错级别:L、M、Q、H
$level = 'H';
// 点的大小:1到10,用于手机端4就可以了
$size = 10;
// 生成的文件名
$qRcode->png($data, false, $level, $size, 0);
$img =ob_get_contents();
ob_end_clean();
// 转base64
$imginfo = 'data:png;base64,' . chunk_split(base64_encode($img));
// Logo的地址
$logo = Lay()['webUrl'].'/static/images/logo3.png';
if ($logo) {
$exploded = explode(',', $imginfo, 2); // 从第一个逗号开始,将base64分成两部分
$encoded = $exploded[1]; // 获取第二部分,索引从0开始
$decoded = base64_decode($encoded);
$QR = imagecreatefromstring($decoded); //目标图象连接资源。
$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
);
// 获取imagecopyresampled合称的图像
ob_start();
imagejpeg($QR, null, 100);
$imageData = ob_get_clean();
// 新图像转base64
$base64_img = "data:image/png;base64,".base64_encode($imageData);
}
return "<img src='{$base64_img}' />";
}