vue使用qrcodejs2生成中心logo二维码

news2024/11/26 10:35:17

项目场景:

提示:这里简述项目相关背景:

项目场景:老板要求分享页面的二维码增加公司Logo

起初是没Logo的

在这里插入图片描述


老板想要的效果
在这里插入图片描述

问题描述

提示:这里使用qrcodejs2生成二维码

1.安装 qrcodejs2

npm install qrcodejs2 --save

2.引入使用

import QRCode from 'qrcodejs2'

3.更改logo在二维码的位置(drawImage补充)

如果logo不在二维码中间,可直接修改drawImage属性或者直接更改二维码宽高尺寸

ctx.drawImage() 方法在画布上绘制图像、画布或视频。
ctx.drawImage() 方法也能够绘制图像的某些部分,以及/或者增加或减少图像的尺寸。
ctx.drawImage(img,sx,sy,swidth,sheight,x,y,width,height);
img 规定要使用的图像、画布或视频。
sx 可选。开始剪切的 x 坐标位置。
sy 可选。开始剪切的 y 坐标位置。
swidth 可选。被剪切图像的宽度。
sheight 可选。被剪切图像的高度。
x 在画布上放置图像的 x 坐标位置。
y 在画布上放置图像的 y 坐标位置。
width 可选。要使用的图像的宽度。(伸展或缩小图像)
height 可选。要使用的图像的高度。(伸展或缩小图像)

ctx.drawImage(logo, (128 - 128 / 3.7) / 2, (128 - 128 / 3.7) / 2, 128 / 3.7, 128 / 3.7)

4.主要代码

      // 添加二维码中间的图片
      if (this.logoImage) {
        let logo = new Image()
        logo.setAttribute('crossOrigin', 'Anonymous')
        logo.src = this.logoImage
        logo.onload = () => {
          let qrImg = this.qrcode._el.getElementsByTagName('img')[0]
          let canvas = this.qrcode._el.getElementsByTagName('canvas')[0]
          this.qrcode._el.title = ''
          canvas.style.display = 'inline-block'
          let ctx = canvas.getContext('2d')
          // 设置logo的大小为二维码图片缩小的3.7倍
          ctx.drawImage(logo, (128 - 128 / 3.7) / 2, (128 - 128 / 3.7) / 2, 128 / 3.7, 128 / 3.7)
          qrImg.src = canvas.toDataURL()
          qrImg.style.display = 'none'
          this.$refs.id.appendChild(this.qrcode._el)
        }
      }

5.页面引入

 <qrcode id="shareQRCode" :text="'https://www.yunqilianmeng.cn/#/shareTrial?id='+ id"
         logoImage="https://baidu.cn/server/upload/1690.png"
  />

全部代码:

提示:详细代码

<template>
  <div :id="id" :ref="id" style="width: 100%;height: 100%;text-align: center;"/>
</template>
<script>
import QRCode from 'qrcodejs2'

export default {
  props: {
    id: {
      type: String,
      required: true
    },
    text: { // 后端返回的二维码地址
      type: String,
      default: 'http://jindo.dev.naver.com/collie'
    },
    width: {
      type: String,
      default: '128'
    },
    height: {
      type: String,
      default: '128'
    },
    colorDark: {
      type: String,
      default: '#000000'
    },
    colorLight: {
      type: String,
      default: '#ffffff'
    },
    logoImage: {
      type: String,
      default: ''
    }
  },
  data () {
    return {
      qrcode: ''
    }
  },
  watch: {
    text (newText) {
      this.createQrcode()
    }
  },
  mounted () {
    this.createQrcode()
  },
  methods: {
    createQrcode () {
      if (this.qrcode) { // 有新的二维码地址了,先把之前的清除掉
        this.$refs[this.id].innerHTML = ''
      }
      this.qrcode = new QRCode(this.$refs[this.id], {
        text: this.text, // 页面地址 ,如果页面需要参数传递请注意哈希模式#
        width: this.width, // 二维码宽度 (不支持100%)
        height: this.height, // 二维码高度 (不支持100%)
        colorDark: this.colorDark,
        colorLight: this.colorLight,
        correctLevel: QRCode.CorrectLevel.H
      })
      // 添加二维码中间的图片
      if (this.logoImage) {
        let logo = new Image()
        logo.setAttribute('crossOrigin', 'Anonymous')
        logo.src = this.logoImage
        logo.onload = () => {
          let qrImg = this.qrcode._el.getElementsByTagName('img')[0]
          let canvas = this.qrcode._el.getElementsByTagName('canvas')[0]
          this.qrcode._el.title = ''
          canvas.style.display = 'inline-block'
          let ctx = canvas.getContext('2d')
          // 设置logo的大小为二维码图片缩小的3.7倍,第二与第三参数代表logo在二维码的位置
          ctx.drawImage(logo, (128 - 128 / 3.7) / 2, (128 - 128 / 3.7) / 2, 128 / 3.7, 128 / 3.7)
          qrImg.src = canvas.toDataURL()
          qrImg.style.display = 'none'
          this.$refs.id.appendChild(this.qrcode._el)
        }
      }
      console.log(this.qrcode, 'qrcode')
    },
    // 制作另一个二维码
    updateCode () {
      this.qrcode.makeCode('http://naver.com')
    }
  }
}
</script>

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

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

相关文章

[滴水逆向]03-12 pe头字段说明课后作业,输出pe结构

#include <iostream> #include <windows.h> using namespace std; #pragma warning(disable:4996) //DOC结构 typedef struct _DOC_HEADER {WORD e_magic;WORD e_cblp;WORD e_cp;WORD e_crlc;WORD e_cparhar;WORD e_minalloc;WORD e_maxalloc;WORD e_ss;WO…

WebGIS开发教程:切片地图服务和动态地图服务的区别以及加载方式

arcgis发布切片地图服务 arcgis发布动态地图服务 切⽚地图服务和动态地图服务是两种常⻅的Web地图服务类型&#xff0c;它们有以下⼏点区别&#xff1a; 1. 数据格式&#xff1a; 切⽚地图服务是⼀种基于瓦⽚&#xff08;Tile&#xff09;数据的地图服务&#xff0c;地图数据…

IDEA工具debug的小技巧

带条件的断点 满足条件的时候才进入断点&#xff0c;比如下面这个list&#xff0c;怎么设置才能使只有s为"b"的时候才进入断点&#xff1f; 技巧&#xff1a;右键断点&#xff0c;写 s.equals(“b”) 表达式 断点回退 第一次没看清楚上一个断点的数据的时候&…

SpringBoot项目Redis使用

SpringBoot项目Redis使用 引入依赖 <!-- redis --> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId> </dependency>对Redis的信息进行配置 redis:database: 0 …

Everything + Cpolar,打造在线搜索的终极神器

文章目录 前言1. 下载安装注册cpolar2. Everything安装和设置2.1 进入Everything官网进行下载2.2 对Everything文件进行设定 3. 创建cpolar内网穿透隧道4. 公网访问测试Everything5. 固定连接公网地址 前言 你还在用Windows资源管理器自带的搜索工具来搜索文件吗&#xff1f;这…

B树的插入和删除

1.B树的插入 1.核心要求 对m阶B树——除根节点外&#xff0c;结点关键字个数 [ m / 2 ] − 1 ≤ n ≤ m − 1 [m/2] -1≤n≤m-1 [m/2]−1≤n≤m−1子树0<关键字1<子树1<关键字2<子树2<… 新元素一定是插入到最底层“终端节点”&#xff0c;用“查找”来确定插…

【Spring Boot 源码学习】OnBeanCondition 详解

Spring Boot 源码学习系列 OnBeanCondition 详解 引言往期内容主要内容1. getOutcomes 方法2. getMatchOutcome 方法2.1 ConditionalOnBean 注解处理2.2 ConditionalOnSingleCandidate 注解处理2.3 ConditionalOnMissingBean 注解处理 3. getMatchingBeans 方法 总结 引言 上篇…

MQ - 15 集群篇_如何构建分布式的消息队列集群(下)

文章目录 导图Pre概述元数据存储服务设计选型基于第三方存储引擎集群内部自实现元数据存储ZooKeeper 的集群构建Kafka 的集群构建基于 ZooKeeper 的集群基于 KRaft 的集群缩容的处理方式总结导图 Pre 接着 MQ - 14 集群篇_如何构建分布式的消息队列集群(上)</

唯品会获得vip商品详情 API 返回值说明(唯品会商品价格销量详情图主图)

item_get-获得vip商品详情 vip.item_get 请求地址 公共参数 名称类型必须描述keyString是调用key&#xff08;必须以GET方式拼接在URL中&#xff09;secretString是调用密钥api_nameString是API接口名称&#xff08;包括在请求地址中&#xff09;[item_search,item_get,item…

threejs给3d模型中的物体换肤(修改材质)

变成这样 this.otherModel.traverse(function (child) {if (child instanceof THREE.Mesh && child.name Cylinder240) {// 导入纹理const textureLoader new THREE.TextureLoader();const floorColortextureLoader.load(require(../../../public/img/color.jpg));co…

在Linux中安装nginx-1.20.1+php-7.4.28(增加扩展)

NginxPHP安装在公网IP为x.x.x.x的服务器上 需要下载安装的软件版本&#xff1a;nginx-1.20.1php-7.4.28 需要增加的PHP扩展如下&#xff1a; 在编译安装php-7.4.28时加上的pcntl&#xff1b; 单独下载安装的Wxwork_finance_sdk&#xff1b;&#xff08;在编译安装php-7.4.2…

django和celery的项目,nginx和uwsgi协议,在通过api端口进行deeplearning任务的训练和排队

问题汇总 redis 安装django和celery的安装nginx和uwsgi的安装 一. Django 的项目&#xff0c;有个runserver直接起了一个webserver&#xff0c;为什么还要Nginx包一层&#xff0c;起一个webserver呢&#xff1f; Nginx的性能比Django自带的Webserver的性能要好&#xff0c;pyt…

Jenkins用户管理(二):不同用户分配不同的任务访问权限

需求:不同用户访问到不同的Jenkins任务。 依赖插件:Role-based Authorization Strategy 1. 插件安装 进入【系统管理】-【插件管理】-【可用插件】,搜索Role-based Authorization Strategy进行安装,随后重启jenkins 2. 全局安全配置 进入【系统管理】-【全局安全配置】,【…

引用js文件实现汉字转拼音

先看效果 具体需求是 第一个文本框输入汉字&#xff0c;第三个显示拼音&#xff0c; 先引用js <script src"/js/pinyinutil.js"></script> html这样 <el-input v-model"inputText" style"width:220px" placeholder"请输入…

2023智慧云打印小程序源码多店铺开源版 +前端

智慧自助云打印系统/智慧云打印小程序源码 前端 这是一款全新的基于Thinkphp的最新自助打印系统&#xff0c;最新UI界面设计的云打印小程序源码

前端开发必备:icon封装技巧

main.js import svgIcon from /components/SvgIcon Vue.component(svg-icon-full, svgIcon) const requireAll requireContext > requireContext.keys().map(requireContext) const req require.context(/assets/icons/svg, false, /\.svg$/) // icon位置 requireAll(re…

【运维 Pro】时序场景实践与原理 - 2. 宽表,窄表与 JSON 字段

【运维Pro】: 由 YMatrix 售前和售后团队负责的栏目。除了介绍日常的数据库运维和使用知识&#xff0c;我们更希望能够通过介绍这些知识背后的原理&#xff0c;让大家和我们一起感知数据库的美妙。 摘要 在上一期 《时序场景实践与原理 - 1.分布与分区》中&#xff0c;我们围…

探索智能应用的基石:多模态大模型赋能文档图像处理

目录 0 写在前面1 文档图像分析新重点2 token荒&#xff1a;电子文档助力大模型3 大模型赋能智能文档分析4 文档图像大模型应用可能性4.1 专有大模型4.2 多模态模型4.3 设计思路 总结 0 写在前面 中国智能产业高峰论坛(CIIS2023)旨在为政企研学各界学者专家提供同台交流的机会…

Denoising Diffusion Autoencoders are Unified Self-supervised Learners

Denoising Diffusion Autoencoders are Unified Self-supervised Learners (Paper reading) Weilai Xiang, Beihang University, arXiv23, Code, Paper 1. 前言 受最近扩散模型进展的启发&#xff0c;这让人想起去噪自编码器&#xff0c;我们研究了它们是否可以通过生成预训…

1952-2018年中国各省份人均GDP数据(消涨处理)

1952-2018年中国各省份人均GDP数据&#xff08;消涨处理&#xff09; 1、时间&#xff1a;1952-2018年 2、范围&#xff1a;30省市 3、指标&#xff1a;人均GDP 4、来源&#xff1a;《新中国60周年统计汇编》和各省年鉴 5、指标解释&#xff1a; 过程为环比人均GDP指数转…