PHP生成二维码+二维码包含logo图片展示

devtools/2024/10/15 5:30:23/

composer require chillerlan/php-qrcode

用到的扩展自己安装(注:只生成二维码只要开gd扩展就行)
在这里插入图片描述
在这里插入图片描述
仅生成二维码看这个:

php">use chillerlan\QRCode\QRCode;public function QRCode(){$qrcode = new QRCode();$url = "http://www.******.com/demo?id=".$id;$response = $qrcode->render($url);return Tools::showJsonMsg('success','操作成功','',$response);}

生成二维码包含logo图片(代码仅供参考,逻辑按照自己的写)

二维码展示大概这样

在这里插入图片描述

php">use chillerlan\QRCode\QRCode;public function QRCode(){$aid = $this->request->getPost('aid');$imgPath = 'uploads/admin/qrcode/'.$aid.'.png';if (file_exists($imgPath)){return Tools::showJsonMsg('success','操作成功','',$imgPath);}if (!$aid) {return Tools::showJsonMsg("error", "id不存在");}$One = $this->agentModel->where(["aid" => $aid])->first();if (!$One) {return Tools::showJsonMsg("error", "不存在");}$qrcode = new QRCode(new QROptions(['version' => 4, // 设置二维码的版本,版本越高,二维码越大'scale'=>10 //二维码大小]));$url = "http://www.******.com/demo?id=".$aid;$response = $qrcode->render($url);// 将SVG格式的二维码数据转换为PNG格式$svgData = str_replace('data:image/svg+xml;base64,', '', $response);$decodedSvgData = base64_decode($svgData);$imagick = new \Imagick();// 读取SVG数据$imagick->readImageBlob($decodedSvgData);// 设置输出格式为PNG$imagick->setImageFormat('png');// 将SVG转换为PNG并获取转换后的数据$pngData = $imagick->getImageBlob();// 创建PNG图像资源$pngImage = imagecreatefromstring($pngData);// 要插入的 Logo 图片路径$logoPath = 'theme/admin/img/logo.png';// 创建 Logo 图片资源$logo = imagecreatefrompng($logoPath);// 获取二维码和 Logo 的宽度和高度$qrCodeWidth = imagesx($pngImage);$qrCodeHeight = imagesy($pngImage);$logoWidth = imagesx($logo);$logoHeight = imagesy($logo);$combinedImage = imagecreatetruecolor(200, 200);// 计算缩放比例$scale = min(200 / $qrCodeWidth, 200 / $qrCodeHeight);// 计算缩放后的宽度和高度$newWidth = $qrCodeWidth * $scale;$newHeight = $qrCodeHeight * $scale;// 创建一个临时画布用于缩放二维码图像$tempImage = imagecreatetruecolor($newWidth, $newHeight);// 将二维码图像缩放到临时画布imagecopyresampled($tempImage, $pngImage, 0, 0, 0, 0, $newWidth, $newHeight, $qrCodeWidth, $qrCodeHeight);// 计算Logo应该放置的位置$logoX = ($newWidth - $logoWidth) / 2;$logoY = ($newHeight - $logoHeight) / 2;// 创建一个新的空白画布,大小为200x200$combinedImage = imagecreatetruecolor(200, 200);// 将Logo图像复制到新的画布上imagecopy($combinedImage, $logo, $logoX, $logoY, 0, 0, $logoWidth, $logoHeight);// 将缩放后的二维码图像叠加在Logo图像的上方imagecopymerge($combinedImage, $tempImage, 0, 0, 0, 0, $newWidth, $newHeight, 70);// 确保目录存在,如果不存在则创建$directory = 'uploads/admin/qrcode/';if (!file_exists($directory)) {mkdir($directory, 0777, true); // 创建目录}// 输出合并后的图像imagepng($combinedImage, $imgPath);// 释放内存imagedestroy($combinedImage);return Tools::showJsonMsg('success','操作成功','',$imgPath);}

前端你自己列表读uploads/admin/qrcode/‘.$aid.’.png这个就行


http://www.ppmy.cn/devtools/42687.html

相关文章

蓝桥杯嵌入式国赛笔记(2):拓展板按键程序设计

目录 1、前言 2、电路原理 3、代码编写 3.1 读取Btn电压 3.2 检索按键 3.3 main文件编写 3.3.1 进行变量定义 3.3.2 AD_Key函数 3.3.3 LCD函数 3.3.4 main函数 3.3.5 完整代码 4、测试 5、总结 1、前言 本文进行拓展板按键程序设计,拓展板的按键是通…

Android android.os.DeadObjectException aidl通信异常分析及解决

问题描述 做一款音乐播放应用,播放服务是通过AIDL形式对外暴露,允许跨进程调用且多个App同时操作音乐播放,偶现android.os.DeadObjectException问题 12-15 09:28:12.371: W/System.err(5412): android.os.DeadObjectException 12-15 09:28:…

Rust:如何在 Windows 的 Linux 子系统(WSL)下安装

一、安装步骤 在Windows Subsystem for Linux (WSL)下安装Rust,可以按照以下步骤进行: 打开WSL终端: 首先,确保你的WSL已经安装并正常运行。你可以在Windows搜索栏中输入“WSL”并选择你安装的Linux发行版(如Ubuntu&a…

在 Visual Studio 2022 (VS2022) 中删除 Git 分支的步骤如下

git branch -r PS \MauiApp1> git push origin --delete “20240523备份” git push origin --delete “20240523备份”

Node.js —— Express 中间件、接口编写、接口跨域 【0基础向Express模块学习】

目录 中间件的概念 什么是中间件 现实生活中的例子 Express 中间件的调用流程 ​编辑 Express 中间件的格式 next 函数的作用 Express 中间件的初体验 定义中间件函数 全局生效的中间件 定义全局中间件的简化形式 中间件的作用 ​编辑 定义多个全局中间件 局部生…

光伏电站在线监测智能诊断系统:开启无人值守新纪元

光伏电站在线监测智能诊断系统:开启无人值守新纪元 大家都知道光伏电站是通过汲取着太阳的光芒,为人类提供源源不断的电能源。然而,随着光伏电站规模的扩大和复杂性的增加,如何有效提高发电效率、减少人工维护成本,实…

【深度学习】多卡训练问题及解决方案

使用双卡训练遇到的问题1: Error: mkl-service Intel(R) MKL: MKL_THREADING_LAYERINTEL is incompatible with libgomp.so.1 library. Try to import numpy first or set the threading layer accordingly. Set MKL_SERVICE_FORCE_INTEL to force it. 解决…