Vue中使用qrcode实现渲染生成二维码中间添加自定义logo-demo

news2024/12/28 18:06:17

效果 

安装

npm i qrcode

使用 

import QRCode from 'qrcode';

 具体生成过程

<template>
    <div class="banner-login">
      <img :src="qrDataUrl" />
    </div>
</template>

<script setup>
import { ref, reactive } from 'vue';
import QRCode from 'qrcode';
import { getNewCode } from '@/api/sefatyCenter';
import { useRouter } from 'vue-router';
const router = useRouter();
const goPath = (r) => {
  router.push({
    path: r
  });
};



let qrDataUrl = ref();
let secret = ref('');
const getCode = async () => {
  const {
    data: { data }
  } = await getNewCode();
  console.log(data);
  secret.value = data.secret;
  //直接生成二维码不做处理
  // qrDataUrl.value = await QRCode.toDataURL(data.uri);

  // 创建一个新的canvas元素来容纳二维码
  const qrCodeCanvas = document.createElement('canvas');
  qrCodeCanvas.width = 200; // 根据需要调整二维码尺寸
  qrCodeCanvas.height = 200;

  // 生成二维码到新的canvas元素
  await QRCode.toCanvas(qrCodeCanvas, data.uri);

  // 在二维码中间添加logo
  const ctx = qrCodeCanvas.getContext('2d');
  const logo = new Image();
  logo.src = require('@/assets/images/logo.png');
  logo.onload = function () {
    const logoSize = qrCodeCanvas.width * 0.26; // 根据需要调整logo尺寸
    const logoX = (qrCodeCanvas.width - logoSize) / 2;
    const logoY = (qrCodeCanvas.height - logoSize) / 2;

    // 绘制二维码
    ctx.drawImage(logo, logoX, logoY, logoSize, logoSize);

    // 将生成的二维码插入到页面中
    qrDataUrl.value = qrCodeCanvas.toDataURL();
  };
};
getCode();


</script>

我们首先创建一个新的canvas元素,用于容纳生成的二维码。然后,使用QRCode.toCanvas方法将二维码生成到新的canvas元素中。

接下来,在logo.onload事件处理程序中,我们创建一个Image对象来加载logo图像,并在二维码中间绘制logo。最后,将生成的二维码转换为数据URL,并将其赋值给qrDataUrl变量。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/987610.html

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

相关文章

怎么压缩视频?最新压缩技巧大分享

在日常生活中&#xff0c;我们常常需要处理各种各样的视频文件&#xff0c;有时候&#xff0c;视频文件的大小会成为我们传输和存储的难题。那么&#xff0c;如何有效地压缩视频文件呢&#xff1f;下面就为大家介绍三个实用的方法&#xff0c;让你轻松解决视频大小的问题。 方法…

JS中Promise对象及其使用方式

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 什么是 Promise 对象⭐ 如何使用 Promise⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅&#xff01;这个专栏是为那些对We…

第14章 内核空间与用户空间数据交互实验(iTOP-RK3568开发板驱动开发指南 )

在“第12章 字符设备驱动框架实验”中&#xff0c;已经对file_operations结构体的进行了填充&#xff0c;该结构体的每一个成员都对应着一个系统调用&#xff0c;例如read、write等&#xff0c;在对应的实验中&#xff0c;只是对调用函数进行了标志打印&#xff0c;并没有真正实…

Gradle下载库速度过慢解决办法

最近搞了个Gradle的项目&#xff0c;项目下载依赖库太慢了&#xff0c;于是… Gradle下载库速度过慢的问题可能由多种原因导致&#xff0c;以下是一些可能的解决方案&#xff1a; 1、使用国内镜像站点&#xff1a; 你可以改变Gradle的配置&#xff0c;使用国内的镜像站点来下…

如何在本地使用Docker搭建和运行Kubernetes集群

文章目录 1. 准备环境2. 安装Minikube3. 启动Minikube集群4. 验证集群5. 部署一个示例应用创建一个Deployment部署应用检查部署 6. 访问应用创建一个Service部署Service获取Service的访问地址 7. 清理资源结论 &#x1f388;个人主页&#xff1a;程序员 小侯 &#x1f390;CSDN…

腾讯云PK阿里云2核2G云服务器租用价格表

2核2G云服务器可以选择阿里云服务器或腾讯云服务器&#xff0c;腾讯云轻量2核2G3M带宽服务器95元一年&#xff0c;阿里云轻量2核2G3M带宽优惠价108元一年&#xff0c;不只是轻量应用服务器&#xff0c;阿里云还可以选择ECS云服务器u1&#xff0c;腾讯云也可以选择CVM标准型S5云…

算法刷题记录-双指针/滑动窗口(LeetCode)

809. Expressive Words 思路 根据题目描述&#xff0c;我们可以知道&#xff0c;如果要将某个单词定义为可扩张&#xff08;stretchy&#xff09;&#xff0c;需要满足如下两个条件&#xff1a; 所以&#xff0c;我们在实现的时候&#xff0c;可以通过两个指针p1和p2&#x…

Reactor模型深度解析

文章目录 Reactor模型深度解析什么是Reactor模型Reactor模型的优势Reactor模型的实现方式同步IO异步IOselectpollepoll Reactor模型的应用场景总结 Reactor模型深度解析 什么是Reactor模型 Reactor模型是一种高并发IO编程模型&#xff0c;它的主要目的是简化IO编程的复杂性&a…

安装Python虚拟环境

环境 python3.10 Ubuntu22.04 首先设置默认python #查看python3 的安装位置 which python3 #设置默认python为 python3 sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 1 #查看是否成功 python --version创建虚拟环境 #安装venv sudo apt i…

【韩顺平】Linux基础

1.网络连接三种方式 1.1 桥接模式&#xff1a;虚拟系统可以和外部系统通讯&#xff0c;但是容易造成IP冲突【1-225】 1.2 NAT模式&#xff1a;网络地址转换模式。虚拟系统可以和外部系统通讯&#xff0c;不造成IP冲突。 1.3 主机模式&#xff1a;独立的系统。 2.虚拟机克隆 3…

Outlook无需API开发连接钉钉群机器人,实现新增会议日程自动发送群消息通知

Outlook用户使用场景&#xff1a; 在企业中&#xff0c;会议和活动的顺利举行对于业务运转和团队协作至关重要。然而&#xff0c;计划的变动总是无法避免&#xff0c;这可能会导致其他人的计划受到影响&#xff0c;打乱原有的安排。为了解决这个问题&#xff0c;许多企业开始使…

Leetcode131. 分割回文串

力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 给你一个字符串 s&#xff0c;请你将 s 分割成一些子串&#xff0c;使每个子串都是 回文串 。返回 s 所有可能的分割方案。 回文串 是正着读和反着读都一样的字符串。 题解&#xff1a;力扣&#xff08…

xargs如何保留文本中的引号

如果文本中有引号&#xff0c;直接用xargs管道操作的话&#xff0c;引号会丢失&#xff0c;如下 该如何保留每一行文本中的引号呢&#xff0c;需要用到xargs的-d选项&#xff0c;设置一个分隔符&#xff0c;这里可以选用换行符来分割 顺便多来一条&#xff0c;直接将文本参数作…

亚马逊秋季促销指南——如何更好的利用促销?

最新消息&#xff0c;亚马逊官方宣布将会在10月份举行Prime会员大促&#xff0c;覆盖多个站点&#xff0c;亚马逊卖家们一定要抓住这波促销机会&#xff0c;在这个秋季再冲一把&#xff01;但是还有一些小白玩家可能对于亚马逊促销了解不够&#xff0c;那么接下来我要讲的这些准…

无涯教程-JavaScript - HEX2OCT函数

描述 HEX2OCT函数将十六进制数转换为八进制数。 语法 HEX2OCT (number, [places])争论 Argument描述Required/Optionalnumber 您要转换的十六进制数。 数字不能超过10个字符(40位)。数字的最高有效位是符号位。其余的39位是幅度位。 负数使用二进制补码表示。 Requiredpla…

微调chatGLM-6B大模型的方法

GLM官方的知乎微调教程&#xff1a;https://zhuanlan.zhihu.com/p/618498001 GLM官方的GitHub微调教程&#xff1a;https://github.com/THUDM/ChatGLM-6B/tree/main/ptuning 说这个微调出的模型和原模型是同时加载的&#xff0c;输入文本的时候会先看看微调出的模型有没有存相应…

服务器分析和监控

在当今数字化时代&#xff0c;对于网络流量的分析和监控变得越来越重要。本文将详细介绍如何利用HTTPS代理服务器来实现高效、安全且可靠的流量分析与监控功能&#xff0c;并提供具体操作步骤以及相关技巧。无论是企业需要优化网络性能还是个人用户&#xff0c;在遵循法规合规前…

E810 100G网卡和pcie bridge 总线带宽协商期望x16,结果X1,导致vpp性能不及预期

现象&#xff1a;pktgen 发包10000M/pps&#xff0c;vpp 运行在1&#xff0c;2&#xff0c;4&#xff0c;8&#xff0c;16 worker数时&#xff0c;数据包size&#xff08;64&#xff0c;256&#xff0c;512&#xff09;数据包转发量没有期望的差距量&#xff0c;且vpp接口rx-mi…

索尼 toio™应用创意开发征文|toio俄罗斯方块游戏

目录 引言 摘要 创意简述 准备工作&#xff5c;手工开始 代码编写&#xff5c;合理集成 使用体验&#xff5c;近乎奇妙 引言 索尼toio™编程机器人是一款引领技术创新的产品&#xff0c;为开发者提供了一个全新的编程和创造平台。toio™的设计旨在将技术、塑性和乐趣融为…

SV-6002T-P 网络对讲求助终端,立柱式智慧城市网络对讲求助终端,停车场出入口一键求助终端

SV-6002T-P 网络对讲求助终端&#xff0c;立柱式智慧城市网络对讲求助终端&#xff0c;停车场出入口一键求助终端 描述&#xff1a;SV-6002T是深圳锐科达电子有限公司的一款新型立柱型室外防水一键求助对讲终端&#xff0c;具有10/100M以太网接口&#xff0c;其接收网络的音频数…