模板 自定义view文件夹 中间件 路由和路由函数 自定义多个route文件 session无效 自定义多个公共函数 中间件别名和数据库连接 伪静态 自定义类库extends 以年月日+编号拼接id,且编号每天从0开始 跨域 宝塔面板新建网站403 网页包含过多重定向 缓存 路由绑定子域名 方法参数错误 php导出excel时身份证变成科学技术法 获取路由参数 生成二维码phpqrcode 使用腾讯OCR(扫描) thinkphp6微信支付回调不访问 查询构造器 导入导出excel:安装使用 导入导出Excel:按日期导出 tp6腾讯云短信 thinkphp unserialize(): Error chinese-calendar 将base64保存到本地

生成二维码phpqrcode

首页 > PHP > Thinkphp6 更新日期:2022-02-25 11:00:33

首先,下载phpqrcode

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


标题导航