vue包含二维码、背景图片、Logo图片和文本说明的图片生成及下载功能

要使用npm安装vue-qrhtml2canvas这两个库

npm install vue-qr html2canvas

完整代码

可以根据实际项目需求调整,改成调用接口展示

<template><div><div ref="qrContainer" class="qr-container"><img class="background-image" :src="bgImageUrl" @load="onImageLoaded" @error="onImageError"><vue-qrref="qrCode"class="qr-code":size="200":correct-level="2":dot-scale="0.5":text="qrText"/><img class="logo" :src="logoUrl"><div ref="textDiv" class="text">{{ text }}</div></div><button @click="downloadImage">下载图片</button></div>
</template><script>
import VueQr from 'vue-qr'
import html2canvas from 'html2canvas'export default {components: {VueQr},data() {return {text: '这里是动态添加的文字',qrText: 'https://blog.csdn.net/miaomiaowins',bgImageUrl: 'https://img30.360buyimg.com/babel/s460x460_jfs/t1/102365/29/52131/177484/670f50b4F2c196f5b/2361ae206127204a.jpg.avif',logoUrl: 'https://img30.360buyimg.com/babel/s460x460_jfs/t1/102365/29/52131/177484/670f50b4F2c196f5b/2361ae206127204a.jpg.avif',isImageLoaded: false}},methods: {onImageLoaded() {this.isImageLoaded = true},onImageError() {console.error('背景图片加载失败,请检查图片 URL 或网络连接。')},downloadImage() {if (!this.isImageLoaded) {console.log('背景图片未加载完成,无法下载。')return}html2canvas(this.$refs.qrContainer, { useCORS: true, logging: true }).then((canvas) => {const link = document.createElement('a')link.href = canvas.toDataURL('image/png')link.download = 'qrcode_with_background.png'document.body.appendChild(link)link.click()document.body.removeChild(link)}).catch((error) => {console.error('html2canvas 转换失败:', error)})}}
}
</script><style scoped>
.qr-container {position: relative;width: 500px;height: 500px;
}.background-image {position: absolute;top: 0;left: 0;width: 100%;height: 100%;object-fit: contain;
}.qr-code {position: absolute;top: 50%;left: 50%;transform: translate(-50%, -50%);
}.logo {position: absolute;top: 50%;left: 50%;transform: translate(-50%, -50%);width: 40px; /* 调整logo的大小 */height: 40px; /* 调整logo的大小 */
}
.text {position: absolute;bottom: 10px;left: 10px;color: rgb(205, 10, 10);}
</style>

运行的结果

如果是表格点击实时生成二维码,需要调要用两次,否则可能下载到上一次生成的二维码

 downloadImage(e) {if (!this.isImageLoaded) {console.log('背景图片未加载完成,无法下载。')return}html2canvas(this.$refs.qrContainer, { useCORS: true, logging: true }).then((canvas) => {this.Picturemethod(e)})},Picturemethod(e) {html2canvas(this.$refs.qrContainer, { useCORS: true, logging: true }).then((canvas) => {const link = document.createElement('a')link.href = canvas.toDataURL('image/png')link.download = `${e}.png`document.body.appendChild(link)link.click()document.body.removeChild(link)}).catch((error) => {console.error('html2canvas 转换失败:', error)})}

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

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

相关文章

使用ajax-hook修改http请求响应数据,篡改后再返回给正常的程序

import { proxy } from "ajax-hook";//正经的项目这样用 proxy({ //代理response&#xff0c; onResponse: (response, handler) > { console.log(response.config.url)//这里判断是不是自己想要监听的url console.log(response.response)//这里查看响应数据 //r…

SpringBoot服务多环境配置

一个项目的的环境一般有三个&#xff1a;开发(dev)、测试(test)、生产(proc)&#xff0c;一般对应三套环境&#xff0c;三套配置文件。 像下面这样直接写两个配置文件是不行的。 application.ymlserver:port: 8080application-dev.ymlspring:datasource:driver-class-name: co…

Oracle ADB 导入 BANK_GRAPH 的学习数据

Oracle ADB 导入 BANK_GRAPH 的学习数据 1. 下载数据2. 导入数据运行 setconstraints.sql 1. 下载数据 访问 https://github.com/oracle-quickstart/oci-arch-graph/tree/main/terraform/scripts&#xff0c;下载&#xff0c; bank_accounts.csvbank_txns.csvsetconstraints.…

html数据类型

数据类型是字面含义&#xff0c;表示各种数据的类型。在任何语言中都存在数据类型&#xff0c;因为数据是各式各样。 1.数值类型 number let a 1; let num 1.1; // 整数小数都是数字值 ​ // 数字肯定有个范围 正无穷大和负无穷大 // Infinity 正无穷大 // -Infinity 负…

问:Spring MVC DispatcherServlet流程步骤梳理

DispatcherServlet是Spring MVC框架中的核心组件&#xff0c;负责接收客户端请求并将其分发到相应的控制器进行处理。作为前端控制器&#xff08;Front Controller&#xff09;的实现&#xff0c;DispatcherServlet在整个请求处理流程中扮演着至关重要的角色。本文将探讨Dispat…

【Jmeter相关】

Jmeter 可以作为接口测试问题&#xff0c;也会涉及到性能相关的问题 一、JMeter中用户定义的变量(User Defined Variables&#xff09;和用户参 数&#xff08;User Parameters&#xff09;的区别是什么? 在JMeter中都是用于定义和存储测试数据的方法&#xff0c;但它们有一…

【GNU】gcc -O编译选项 -Og -O0 -O1 -O2 -O3 -Os

1、gcc -O的作用 GCC 提供的 -O 系列选项用于优化代码。这些选项可以控制编译器对代码进行优化的程度和类型&#xff0c;从而提高代码的性能、减小代码体积或优化其他特性。 2、gcc -Og -O0 -O1 -O2 -O3 -Os 2.1 gcc -Og 启用调试友好的优化&#xff0c;平衡调试器功能与性…

基于深度学习的文本信息提取方法研究(pytorch python textcnn框架)

&#x1f497;博主介绍&#x1f497;&#xff1a;✌在职Java研发工程师、专注于程序设计、源码分享、技术交流、专注于Java技术领域和毕业设计✌ 温馨提示&#xff1a;文末有 CSDN 平台官方提供的老师 Wechat / QQ 名片 :) Java精品实战案例《700套》 2025最新毕业设计选题推荐…

leetcode400第N位数字

代码 class Solution {public int findNthDigit(int n) {int base 1;//位数int weight 9;//权重while(n>(long)base*weight){//300n-base*weight;base;weight*10;}//n111 base3 weight900;n--;int res (int)Math.pow(10,base-1)n/base;int index n%base;return String…

Docker中的一些常用命令

find / -type f -name “文件名” 2>/dev/null 寻找所有目录中的这个文件 pwd 查看当前目录的地址 docker pull 镜像名 强制拉镜像 docker run 运行docker systemctl daemon-reload 关闭docker systemctl start docker 启动docker systemctl restart docker 重启docker /…

Redis环境部署(主从模式、哨兵模式、集群模式)

一、概述 REmote DIctionary Server(Redis) 是一个由 Salvatore Sanfilippo 写的 key-value 存储系统&#xff0c;是跨平台的非关系型数据库。Redis 是一个开源的使用 ANSI C 语言编写、遵守 BSD 协议、支持网络、可基于内存、分布式、可选持久性的键值对(Key-Value)存储数据库…

sql数据库-权限控制-DCL

目录 常用权限类别 查询用户权限 举例 授予用户权限 删除权限 常用权限类别 权限说明ALL,ALL PRIVILEGES所有权限SELECT查询数据INSERT插入数据UPDATE修改数据DELETE删除数据ALTER修改表DROP删除数据库/表/视图CREATE创建数据库/表 查询用户权限 show grants for 用户名…

如何创建你的第一个 Telegram 机器人:一步步教程

Telegram 是一款全球广受欢迎的即时通讯软件&#xff0c;其开放的 API 使得开发机器人变得非常简单。无论你是开发新手还是经验丰富的工程师&#xff0c;都可以在短时间内创建一个功能强大的 Telegram 机器人。这篇文章将带你从零开始创建属于你的第一个机器人。 1. 什么是 Te…

Linux进阶:常用操作

systemctl&#xff1a; 控制系统服务的启动、关闭 系统内置服务均可被systemctl控制第三方软件&#xff0c;如果自动注册了可以被systemctl控制第三方软件&#xff0c;如果没有自动注册&#xff0c;可以手动注册 语法&#xff1a;systemctl start | stop | restart | disable…

从源头保障电力安全:输电线路动态增容与温度监测技术详解

在电力系统中&#xff0c;输电线路是电能传输的关键环节。然而&#xff0c;当导线温度过高时&#xff0c;会加速导线老化&#xff0c;降低绝缘性能&#xff0c;甚至引发短路、火灾等严重事故&#xff0c;对电网安全运行构成巨大威胁。近日&#xff0c;某地区因持续高温和用电负…

vue2动态导出多级表头表格

需求&#xff1a;导出多级表格&#xff0c;如下&#xff0c;每个人名对应的是不同的城市金钱和年龄&#xff0c;日期占俩行&#xff0c;需要根据数据进行动态展示 1.效果 2.关键代码讲解 2.1数据源 2.2所需插件 npm install xlsx 2.3关键代码 创建name组和date组&#xff0c…

蓝桥杯每日真题 - 第16天

题目&#xff1a;&#xff08;卡牌&#xff09; 题目描述&#xff08;13届 C&C B组C题&#xff09; 解题思路&#xff1a; 题目分析&#xff1a; 有 n 种卡牌&#xff0c;每种卡牌的现有数量为 a[i]&#xff0c;所需的最大数量为 b[i]&#xff0c;还有 m 张空白卡牌。 每…

【c++笔试强训】(第十三篇)

目录 添加逗号&#xff08;模拟&#xff09; 题目解析 讲解算法原理 编写代码 跳台阶&#xff08;动态规划&#xff09; 题目解析 讲解算法原理 编写代码 添加逗号&#xff08;模拟&#xff09; 题目解析 1.题目链接&#xff1a;添加逗号_牛客题霸_牛客网 2.题目描述…

在Unity中使用Epplus写Excel

Overview 本文旨在帮助你快速入门,该库发展多年内容庞大(官方文档写的极好:https://github.com/EPPlusSoftware/EPPlus/wiki),有些功能在Unity环境可能你永远都不会使用. 官方的一个Demo: https://github.com/EPPlusSoftware/EPPlus.Samples.CSharp 如果你只有读的需求,可以…

Python爬虫下载新闻,Flask展现新闻(2)

上篇讲了用Python从新闻网站上下载新闻&#xff0c;本篇讲用Flask展现新闻。关于Flask安装网上好多教程&#xff0c;不赘述。下面主要讲 HTML-Flask-数据 的关系。 简洁版 如图&#xff0c;页面简单&#xff0c;主要显示新闻标题。 分页&#xff0c;使用最简单的分页技术&…