tp6借助原生插件phpqrcode生成二维码

首先,下载phpqrcode

链接:https://pan.baidu.com/s/14ZHQn932sMOfeA8n5QZZwQ
提取码:yg37

下载完成后,将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}'  />";
}

$qRcode->png() 的参数

// 参数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中填写图片保存地址。


生成带Logo的二维码

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}'  />";	
    }

给TA买糖
共{{data.count}}人
人已赞赏
tp6-插件

云对象储存

2021-4-21 19:11:37

tp6-插件

TP6使用腾讯OCR

2021-6-22 15:34:25

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
今日签到
有新私信 私信列表
搜索