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

composer require chillerlan/php-qrcode

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

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图片(代码仅供参考,逻辑按照自己的写)

二维码展示大概这样

在这里插入图片描述

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.mzph.cn/news/840181.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Beta 分布和 Gamma 分布

0. 摘要 本文主要介绍 B e t a Beta Beta 分布和 G a m m a Gamma Gamma 分布之间的关系, 以及两者的采样方法. 其实, PyTorch、Numpy、Scipy 等一些机器学习包已经实现了对这两种分布的包装, 本文主要目的是理解背后的大致原理. 1. Beta 分布 设 X ∼ B e t a ( α , β…

金蝶「起舞」,AI进化

能清晰感受到的是,金蝶仍然在不断进化,甚至伴随着AI时代的到来,它的进化信号愈发明显。 这些进化对应的具体动作是,把过去多年的服务模型整合成AI模型,把具体的服务“工艺”整理成流程编排能力,以及从740…

水下哨兵 智能守护——北斗人员落水报警与快速应急响应方案

随着科技的不断发展,人们对于安全的需求也越来越高,尤其是在水域活动中,落水事故时有发生,给人们的生命和财产安全带来了很大威胁。为了更好地保障水域活动者的安全,北斗短报文技术被广泛应用于落水报警系统中&#xf…

不平衡数据研究:分配权重 合并2个loader

分配权重(基于实例分配,基于类分配) import numpy as np import torch from torch.utils.data import DataLoader, WeightedRandomSampler, Dataset# Mock dataset class class MockDataset(Dataset):def __init__(self, data, targets):sel…

玩转OpenHarmony智能家居:如何实现开发版“碰一碰”设备控制

一、简介 “碰一碰”设备控制,依托NFC短距通信协议,通过碰一碰的交互方式,将OpenAtom OpenHarmony(简称“OpenHarmony”)标准系统设备和全场景设备连接起来,解决了应用与设备之间接续慢、传输难的问题&…

什么是DDoS流量清洗?

随着互联网的飞速发展,网络安全问题日益凸显,其中分布式拒绝服务(DDoS)攻击尤为引人关注。为了有效应对这一威胁,流量清洗服务应运而生,成为网络安全领域的一项重要技术。 流量清洗服务是一种专门针对DDoS…

昔日辉煌不再,PHP老矣,尚能饭否?

导语 | 近期 TIOBE 最新指数显示,PHP 的流行度降至了历史最低,排在第 17 名,同时,在年度 Stack Overflow 开发者调查报告中,PHP 在开发者中的受欢迎程度已经从之前的约 30% 萎缩至现在的 18%。“PHP 是世界上最好的语言…

WiFi蓝牙模块开发配置过程中需要注意的细节

在很多产品的应用场景中,WIFI网络会给我们提供很多便捷,MCU开发中大多使用串口WIFI蓝牙模块来实现产品接入WIFI网络中。   具体的使用模型如下图所示:整个系统涉及到WIFI网络、手机、服务器平台以及我们设计的产品,一个完整的生…

Docker技术搭建Grafana监控平台

centos7虚拟机和docker的安装:可以参考之前的博文 CPU、mysql-exporter、docker监控模板:百度网盘 提取码:0000 先查看服务器时间是否和当前时间一致,如果不一致,查看对应设置:centos7时间同步博文 一、…

拆分盘投资深度解析:投资逻辑、风险探讨与投资建议

随着互联网技术的飞速发展,金融领域也迎来了诸多创新。其中,拆分盘作为一种新型投资模式,以其独特的“只涨不跌”机制,吸引了众多投资者的目光。本文将深入探讨拆分盘的投资逻辑,并通过一个实际案例进行解析&#xff0…

BUUCTF [GUET-CTF2019]zips 1

BUUCTF:https://buuoj.cn/challenges 题目描述: 得到的 flag 请包上 flag{} 提交。 密文: 得到一个attachment.zip文件 解题思路: 1、解压attachment.zip,得到222.zip文件。尝试解压需要密码,使用Ziperello爆破密码…

CATIA入门操作——萌新宝宝遇到的奇奇怪怪的问题解决,持续更新中。。。

目录 引出发生肾么事了??鼠标中键旋转不了解决:特征树不显示参数关系 我的窗口去哪了?插曲:草图工具的调出插曲:颜色工具栏显示 弹窗警告警告:创建约束是临时的 操作技巧技巧:快速隐…

Bytebase 2.17.0 - 支持为工单设置标签

🚀 新功能 支持为工单设置标签。 支持显示工单任务执行日志,如影响行数或错误(支持 MySQL 和 PostgreSQL)。 支持在数据库页面为表或列配置分类分级。之前的版本需要通过 DDL 实现,且只支持 MySQL 和 PostgreSQL。…

【传知代码】Modnet 人像抠图-论文复现

文章目录 概述原理介绍核心逻辑ModNet 的结构 环境配置WebUI 小结 论文地址 论文GitHub 本文涉及的源码可从Modnet 人像抠图该文章下方附件获取 概述 人像抠图技术在多个领域有着广泛的应用场景,包括但不限于: 展馆互动拍照:展馆中使用的抠…

【高阶数据结构】 B树 -- 详解

一、常见的搜索结构 适合做内查找: 以上结构适合用于数据量相对不是很大,能够一次性存放在内存中,进行数据查找的场景。如果数据量很大,比如有 100G 数据,无法一次放进内存中,那就只能放在磁盘上了。 如果…

计算机系统基础 8 循环程序

概要 两种实现方法——分支指令实现和专门的循环语句实现以及有关循环的优化。 分支指令实现 倒计数 …… MOV ECX,循环次数 LOOPA:…… …… DEC ECX JNE LOOPA 正计数 …… MOV ECX,0 LOOPA: …… INC ECX CMP …

向郭老师学习研发项目管理

学习研发项目管理思路 通过以下思路来学习研发项目管理: 1、研发项目管理分3级 2、研发项目管理分4类 3、研发项目管理分5大过程组 4、新产品开发项目生命周期分6个阶段 5、研发项目管理分10大知识体系 项目组合、项目集、简单项目3级管理 针对Portfolio组合…

Nodejs及stfshow相关例题

Nodejs及stfshow相关例题 Node.js 是一个基于 Chrome V8 引擎的 Javascript 运行环境。可以说nodejs是一个运行环境,或者说是一个 JS 语言解释器而不是某种库。 Node.js可以生成动态页面内容Node.js 可以在服务器上创建、打开、读取、写入、删除和关闭文件Node.js…

解决无法启动Redis,打开redis-server闪退的问题

【问题】 ① 双击redis-server.exe闪退。 ② 终端运行redis-server没反应。 但是终端运行redis -cli没问题。 【解决方法】 步骤1:找到Redis文件夹,右击,在终端打开。 步骤2:输入命令:redis-server.exe redis.windows…