vue将二维码做成名片,并且生成图片保存

news2024/11/13 19:02:57

效果图

在这里插入图片描述

1. 安装html2canvas

首先,你需要在你的Vue项目中安装html2canvas。你可以通过npm或yarn来安装它:

npm install html2canvas  
# 或者  
yarn add html2canvas

2.组件形式

2.1 创建组件

在你的Vue项目中,创建一个新的Vue组件,比如BusinessCard.vue,用来展示名片并处理图片的保存。

<template>  
  <div class="business-card-container" ref="businessCard">  
    <div class="qrcode-container">  
      <img :src="qrcodeSrc" alt="QR Code" class="qrcode">  
    </div>  
    <div class="info">  
      <h2>{{ name }}</h2>  
      <p>{{ position }}</p>  
      <p>联系电话:{{ phone }}</p>  
      <p>邮箱:{{ email }}</p>  
    </div>  
    <button @click="saveAsImage">保存为图片</button>  
  </div>  
</template>  
  
<script>  
import html2canvas from 'html2canvas';  
  
export default {  
  data() {  
    return {  
      qrcodeSrc: 'path/to/your/qrcode.png', // 你的二维码图片路径  
      name: '张三',  
      position: '软件工程师',  
      phone: '123-456-7890',  
      email: 'zhangsan@example.com',  
    };  
  },  
  methods: {  
    async saveAsImage() {  
      try {  
        const canvas = await html2canvas(this.$refs.businessCard, {  
          scale: 2, // 可以根据需要调整缩放比例  
          useCORS: true, // 如果二维码图片是跨域的,需要设置这个选项  
        });  
  
        // 创建一个链接,点击时下载图片  
        const link = document.createElement('a');  
        link.download = 'business-card.png';  
        link.href = canvas.toDataURL('image/png');  
        link.click();  
  
        // 可选:显示一些成功的消息  
        alert('名片已保存为图片!');  
      } catch (error) {  
        console.error('保存图片失败:', error);  
        alert('保存图片时发生错误!');  
      }  
    },  
  },  
};  
</script>  
  
<style scoped>  
.business-card-container {  
  display: flex;  
  align-items: center;  
  justify-content: space-between;  
  padding: 20px;  
  border: 1px solid #ccc;  
  width: 300px;  
  box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);  
}  
  
.qrcode-container {  
  width: 100px;  
  height: 100px;  
  overflow: hidden;  
  display: flex;  
  justify-content: center;  
  align-items: center;  
}  
  
.qrcode {  
  width: 100%;  
  height: auto;  
  max-width: 100%;  
  max-height: 100%;  
}  
  
.info {  
  flex: 1;  
  padding-left: 20px;  
}  
</style>

2.2 使用组件

在你的Vue应用的某个页面或组件中,引入并使用BusinessCard组件。

<template>  
  <div>  
    <BusinessCard />  
  </div>  
</template>  
  
<script>  
import BusinessCard from './components/BusinessCard.vue';  
  
export default {  
  components: {  
    BusinessCard,  
  },  
};  
</script>

3.非组件形式

首先,确保你已经通过npm或yarn安装了html2canvas,然后使用以下代码

<template>  
  <div>  
    <!-- 名片内容 -->  
    <div id="businessCard" class="business-card-container">  
      <div class="qrcode-container">  
        <img :src="qrcodeSrc" alt="QR Code" class="qrcode">  
      </div>  
      <div class="info">  
        <h2>{{ name }}</h2>  
        <p>{{ position }}</p>  
        <p>联系电话:{{ phone }}</p>  
        <p>邮箱:{{ email }}</p>  
      </div>  
      <button @click="saveAsImage">保存为图片</button>  
    </div>  
  </div>  
</template>  
  
<script>  
// 引入html2canvas  
import html2canvas from 'html2canvas';  
  
export default {  
  data() {  
    return {  
      qrcodeSrc: 'path/to/your/qrcode.png', // 你的二维码图片路径  
      name: '张三',  
      position: '软件工程师',  
      phone: '123-456-7890',  
      email: 'zhangsan@example.com',  
    };  
  },  
  methods: {  
    saveAsImage() {  
      // 使用html2canvas将DOM元素渲染成Canvas  
      html2canvas(document.getElementById('businessCard'), {  
        scale: 2, // 缩放比例  
        useCORS: true, // 如果二维码图片是跨域的,需要设置这个选项  
      }).then(canvas => {  
        // 将Canvas转换为图片并触发下载  
        const imageUrl = canvas.toDataURL('image/png');  
        const link = document.createElement('a');  
        link.download = 'business-card.png';  
        link.href = imageUrl;  
        link.click();  
  
        // 可选:显示一些成功的消息  
        alert('名片已保存为图片!');  
      }).catch(error => {  
        console.error('保存图片失败:', error);  
        alert('保存图片时发生错误!');  
      });  
    },  
  },  
};  
</script>  

<style scoped>  
.business-card-container {  
  display: flex;  
  align-items: center;  
  justify-content: space-between;  
  padding: 20px;  
  border: 1px solid #ccc;  
  width: 300px;  
  box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);  
}  
  
.qrcode-container {  
  width: 100px;  
  height: 100px;  
  overflow: hidden;  
  display: flex;  
  justify-content: center;  
  align-items: center;  
}  
  
.qrcode {  
  width: 100%;  
  height: auto;  
  max-width: 100%;  
  max-height: 100%;  
}  
  
.info {  
  flex: 1;  
  padding-left: 20px;  
}  
</style>

说明

以下示例代码和效果图不一致,具体需要根据指定需求来决定

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

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

相关文章

YOLO-World: Real-Time Open-Vocabulary Object Detection:实时开放词汇对象检测

YOLO系列探测器已成为高效实用的工具。然而&#xff0c;它们对预定义和训练的对象类别的依赖限制了它们在开放场景中的适用性。针对这一限制&#xff0c;我们引入了YOLO-World&#xff0c;这是一种创新方法&#xff0c;通过视觉语言建模和大规模数据集的预训练&#xff0c;增强…

深度学习入门-10

基于小土堆学习 池化层学习 池化层&#xff08;Pooling Layer&#xff09;是卷积神经网络&#xff08;CNN&#xff09;中的一种重要组件&#xff0c;它的主要作用是逐步减小数据的空间尺寸&#xff08;即高度和宽度&#xff09;&#xff0c;以减少网络中参数的数量和计算量&a…

OpenCV绘图函数(2)绘制圆形函数circle()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 绘制一个圆。 cv::circle 函数用于绘制一个给定中心和半径的简单圆或填充圆。 函数原型 void cv::circle (InputOutputArray img,Point cen…

a探索Python中的DOM操作神器:pyquery

文章目录 探索Python中的DOM操作神器&#xff1a;pyquery背景&#xff1a;为什么选择pyquery&#xff1f;pyquery是什么&#xff1f;如何安装pyquery&#xff1f;五个简单的pyquery函数使用方法场景应用&#xff1a;pyquery在实际开发中常见bug及解决方案总结 探索Python中的DO…

游泳耳机哪个牌子好?四大爆款游泳耳机实测,优缺点秒懂!

在快节奏的现代生活中&#xff0c;游泳不仅是一种锻炼身体的方式&#xff0c;更是一种放松心情、享受宁静的休闲活动。而音乐&#xff0c;作为情感的载体&#xff0c;其在游泳过程中的陪伴&#xff0c;无疑能够让人更加沉浸于水下的宁静与自由。因此&#xff0c;一款性能优越、…

积鼎科技携手潍柴动力的喷嘴雾化模拟项目荣获2024年数字仿真卓越应用奖

近日&#xff0c;积鼎科技携手潍柴动力股份有限公司&#xff08;以下简称“潍柴动力”&#xff09;&#xff0c;凭借创新的喷嘴雾化一体化模拟仿真项目&#xff0c;其成果价值赢得了行业专家的一致认可&#xff0c;成功荣获2024年度数字仿真科技奖卓越应用奖。潍柴动力作为中国…

唯创知音在线TTS方案简介及测试版操作说明

一&#xff1a;背景介绍 在物联网与智能设备日新月异的今天&#xff0c;音频传输与控制技术成为了提升用户体验的关键环节。WT2605C蓝牙音频更新方案&#xff0c;凭借其强大的功能集与高效的交互设计&#xff0c;为两轮电动车、电子锁、提示器、智能安防等多个领域带来了前所未…

OpenAI将禁止中国使用ChatGPT了,你知道吗?

由于政策、法律原因&#xff0c;2024年7月9日以后OpenAI将禁止中国使用ChatGPT 以及调用相关接口&#xff0c;这样的话国内就没法使用ChatGPT 开发应用了。 不过不要急&#xff0c;国内有很多类似ChatGPT 的AI大模型&#xff0c;比如&#xff1a;文心一言、通义千问、ChatGLM、…

计算机毕业设计选题推荐-救援物资管理系统-Java/Python项目实战

✨作者主页&#xff1a;IT毕设梦工厂✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Py…

ACCESS 工具注入实战 凡诺靶场

简介 Access数据库注入攻击是一种常见的网络安全&#xff0c;通过注入SQL代码来获取未授权的数据访问权限。这种攻击利用了应用程序与数据库之间的交互漏洞&#xff0c;攻击者通过输入特定的SQL代码片段来操纵数据库查询&#xff0c;从而绕过应用程序的安全机制&#xff0c;获取…

如何把控调整Facebook广告预算的正确时机

对于如何调整Facebook广告预算&#xff0c;之前我们已经出过几篇文章了&#xff0c;关注我们的朋友应该已经有了一定的了解&#xff0c;但对于什么时候该调整预算&#xff0c;什么时候该暂停广告&#xff0c;有些投手可能还无法准确的把控这个时机&#xff0c;特别是有的新手&a…

怎么把mp4转换成mp3?5种转换方法教会你

我们时常需要从视频中提取音频&#xff0c;比如将电影配乐、教学视频中的讲解或是喜爱的歌曲MV转换为MP3格式&#xff0c;以便在不同设备上播放或编辑。那么怎么把一个视频中的音频提取出来变成mp3格式呢&#xff1f;别着急&#xff0c;教大家5种简单高效转换方法&#xff0c;一…

SQLi-LABS靶场36-40通过攻略

less-36 这一关是转义函数换成了mysql_real_escape_string,绕过方法与35关一致 1.判断注入点 2.判断闭合方式 id1A0 -- 3.查看页面回显点 ?id-1%A0%27%20%20union%20select%201,2,3-- 4.查询数据库名 ?id-1%A0%27%20%20union%20select%201,database(),3-- 5.查询数据库的…

Qt20窗口相关位置函数

窗口相关位置函数 知识点geometry.hgeometry.cppmain.cpp运行图 知识点 geometry().x() 多屏幕实现方法 #include <QWidget> #include <QPoint> #include <QScreen> // 假设这个函数是某个QWidget的子类中的成员函数 void MyWidget::showGlobalXPos…

【生日视频制作】美女车模特举牌AE模板修改文字软件生成器教程特效素材【AE模板】

生日视频制作教程美女车模特举牌AE模板改字广软件告生成器素材 怎么如何做的【生日视频制作】美女车模特举牌AE模板修改文字软件生成器教程特效素材【AE模板】 生日视频制作步骤&#xff1a; 安装AE软件下载AE模板把AE模板导入AE软件修改图片或文字渲染出视频

C# for语句

计数循环使用for语句比while语句可读性高 for (int i 0; i < 10; i) { Console.WriteLine("hello"); } 先执行int i0&#xff1b;语句&#xff0c;且只执行一次 判断循环条件 i<10; 语句的结果是否为true&#xff0c;如果为true&#xff0c;先执行循环体…

【MySQL】mysql索引和事务(面试经典问题)

欢迎关注个人主页&#xff1a;逸狼 创造不易&#xff0c;可以点点赞吗~ 如有错误&#xff0c;欢迎指出~ 目录 mysql索引 代价 查看索引 创建索引 删除索引 索引背后的数据结构 B树 B树 B树与B树的区别 B树的优势 mysql事务 事务 涉及的四个核心特性: 隔离性详细解释 脏读 不可重…

阿里巴巴1688 阿里228滑块 网站分析

声明: 本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;抓包内容、敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff01; 有相关问题请第一时间头像私信联系我…

前端接口请求与后端交互详解 联调后端取不到值 自己的一点记录写的比较随意 会比较乱但都是干货

响应头&#xff1a; cache-control: 缓存控制 联调后端取不到值&#xff1f;&#xff1f; 无论何种形式传递&#xff0c;后端解析表单信息的时候&#xff0c;会考虑Content-Type。 如果是JSON字符串的话&#xff0c;后端解析payload的内容时候要去解析JSON。 如果是key1val…

国科大 矩阵论2023秋季 叶世伟老师 考试试卷

叶老师的考试很难&#xff0c;图源一位胆大的勇者~ 希望能帮助大家&#xff01;