vue使用 vue-qr 和 html2canvas 链接生成普通二维码和海报二维码

首先下载插件

npm i vue-qr --save
npm i html2canvas --save

链接生成二维码并下载到本地

// 模板中的代码
      <el-dialog :visible.sync="showDownloadDialog"
                 title="测评下载"
                 width="35%">
        <div class="dialog-content">
          <el-radio-group v-model="radio">
            <el-radio :label="1">海报二维码</el-radio>
            <el-radio :label="2">高清二维码</el-radio>
          </el-radio-group>
          <div class="evaluationUrl">
            测评链接:
            <div class="copyUrl">
              <span class="oneLine">{{ QRUrl }}</span>
              <span class="copy"
                    :data-clipboard-text="QRUrl"
                    @click="copy">复制链接</span>
            </div>
            <div id="qrcode">
              <vue-qr :text="QRUrl" // 链接
                      :size="175" // 二维码的宽高
                      :margin="1"></vue-qr>
            </div>
          </div>
        </div>
        <div slot="footer"
             class="dialog-footer">
          <el-button @click="showDownloadDialog = false"
                     class="btn-cancel">取消</el-button>
          <el-button @click="confirmDownload"
                     type="primary">下载</el-button>
        </div>
      </el-dialog>

在使用的组件中引入 注册在组件中

import VueQr from 'vue-qr';
import html2canvas from 'html2canvas';
export default {
  name: 'EvaluationList',
  components: {
    VueQr
  },
 }

下载二维码到本地

confirmDownload() {
      // 确认下载二维码或者海报二维码
      if (this.radio === 2) {
        // 下载高清二维码
        var oQrcode = document.querySelector('#qrcode img');
        var url = oQrcode.src;
        var a = document.createElement('a');
        var event = new MouseEvent('click');
        // 下载图名字
        a.download = '高清二维码';
        // url
        a.href = url;
        // 合成函数,执行下载
        a.dispatchEvent(event);
      } else {
        // 下载海报二维码
        this.saveImg();
      }
    },

由于需求是不需要预览 直接下载 所以将二维码进行了隐藏

#qrcode {
  display: none;
}

效果图如下
下载弹窗
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201120150513273.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDk4MDczMg==,size_16,color_FFFFFF,t_70#pic_center
在这里插入图片描述
二维码和背景图片合成海报二维码下载到本地
模板中的代码

<div class="bgCode"
           id="mycanvas">
        <vue-qr class="QrcodeBg"
                :text="QRUrl" // 链接
                :margin="1"
                :size="175">
        </vue-qr>
      </div>

下载海报到本地

saveImg() {
      // 先获取你要转换为img的dom节点
      var node = document.getElementById('mycanvas'); // 传入的id名称
      var width = node.offsetWidth; // dom宽
      var height = node.offsetHeight; // dom高
      var scale = 2; // 放大倍数 这个相当于清晰度 调大一点更清晰一点
      html2canvas(node, {
        width: width,
        heigth: height,
        backgroundColor: '#ffffff', // 背景颜色 为null是透明
        dpi: window.devicePixelRatio * 2, // 按屏幕像素比增加像素
        scale: scale,
        X: 0,
        Y: 0,
        scrollX: -3, // 如果左边多个白边 设置该偏移-3 或者更多
        scrollY: 0,
        useCORS: true, // 是否使用CORS从服务器加载图像 !!!
        allowTaint: true // 是否允许跨域图像污染画布  !!!
      }).then((canvas) => {
        var url = canvas.toDataURL(); // 这里上面不设值cors会报错
        var a = document.createElement('a'); // 创建一个a标签 用来下载
        a.download = '海报二维码'; // 设置下载的图片名称
        var event = new MouseEvent('click'); // 增加一个点击事件
        a.href = url; // 此处的url为base64格式的图片资源
        a.dispatchEvent(event); // 触发a的单击事件 即可完成下载
      });
    },

css
需求不需要展示海报二维码 所以使用z-index 降低层级 不展示在页面上 将链接转成二维码后定位到背景图片放置二维码的位置

.bgCode {
  position: fixed;
  top: 10px;
  left: 10px;
  z-index: -10;
  width: 375px;
  height: 667px;
  background: url('~@/assets/images/AIEvaluation/bg.png');
  background-size: contain;

  .QrcodeBg {
    position: absolute;
    top: 348px;
    left: 100px;
  }
}

效果图如下
在这里插入图片描述
在这里插入图片描述
vue-qr 常用属性介绍

text 二维码内容
size 二维码宽高大小,因为是正方形,所以设一个参数即可
margin 默认边距20px,不喜欢的话自己设为0
colorDark 实点的颜色,注意要和colorLight一起设置才有效
colorLight 空白的颜色,注意要和colorDark一起设置才有效
bgSrc 嵌入背景图地址,没什么卵用,不建议设置
logoSrc 二维码中间的图,这个是好东西,设置一下显得专业点
logoScale 中间图的尺寸,不要设太大,太大会导致扫码失败的
dotScale 那些小点点的大小,这个也没什么好纠结的,不建议设置了

官方vue-qr:官方文档

html2canvas 配置项介绍 html2canvas 中文文档

有什么问题留言一起交流下吧。

你可以使用以下步骤来使用 vue-qr 生成二维码并下载二维码: 1. 安装 vue-qr 你可以使用以下命令来安装 vue-qr: ``` npm install vue-qr --save ``` 2. 在 Vue 组件中使用 vue-qr 你可以在 Vue 组件中使用 vue-qr,并传递需要生成二维码的文本作为参数: ```html <template> <div> <qr :text="qrText"></qr> <button @click="downloadQR">Download QR Code</button> </div> </template> <script> import QR from 'vue-qr' export default { components: { QR, }, data() { return { qrText: 'https://www.example.com', } }, methods: { downloadQR() { const canvas = document.querySelector('canvas') const dataURL = canvas.toDataURL('image/png') const link = document.createElement('a') link.download = 'qr-code.png' link.href = dataURL document.body.appendChild(link) link.click() document.body.removeChild(link) }, }, } </script> ``` 在上面的例子中,我们首先导入 vue-qr 并将其注册为组件。然后,我们定义了一个 data 属性 `qrText`,它包含了需要生成二维码的文本。在模板中,我们使用 `<qr>` 标签来渲染二维码。我们还添加了一个按钮,以便用户可以下载二维码。 在 `downloadQR()` 方法中,我们获取了 Canvas 元素并将其转换为 PNG 格式的数据 URL。然后,我们创建了一个 `<a>` 元素,并将其下载属性设置为 `qr-code.png`,并将其 `href` 属性设置为数据 URL。最后,我们将 `<a>` 元素添加到页面中,模拟用户单击该元素并将其从页面中删除。 3. 运行应用程序 现在,你可以运行你的应用程序并生成并下载二维码
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值