vue二维码生成与图片下载

Vue实现动态生成并下载二维码
本文介绍了如何在Vue项目中使用qrcode-vue库生成二维码,并提供代码实例,包括安装步骤、组件配置和下载图片的实现。

(一)web页面效果:

(二)执行结果:

(三)vue代码实例:

1)安装qrcode-vue库:npm install --save qrcode-vue 

2)vue代码

<template>
  <div class="div-box">
    <qrcode-vue
        id="qrcodeBox"
        :size="qrcodeVue.size"
        :value="qrcodeVue.value"
        :bgColor="qrcodeVue.bgColor"
        :fgColor="qrcodeVue.fgColor">
    </qrcode-vue>
     <el-button type="primary" icon="el-icon-document" size="small" @click="downloadCode">下载二维码图片</el-button>
  </div>       
</template>

<script>

  import qrcodeVue from 'qrcode-vue'

  export default {
    name: 'Test',
    components: { qrcodeVue },
    data () {
      return {
         qrcodeVue: {
          size: 150,
          bgColor: '#67C23A', //背景色
          fgColor: '#FFFFFF', //前景色
          value: 'qrCode value', //二维码值
          logo: require('@/assets/logo.png') //logo图片
        }
      }
    },
    created () {
      
    },
    mounted () {
       
    },
    methods: {
       downloadCode(){
          //找到canvas标签
          let myCanvas = document
            .getElementById('qrcodeBox')
            .getElementsByTagName('canvas')
          let img = document.getElementById('qrcodeBox').getElementsByTagName('img')
          // // //创建一个a标签节点
          let a = document.createElement('a')
          // //设置a标签的href属性(将canvas变成png图片)
          let imgURL = myCanvas[0].toDataURL('image/jpg')
          let ua = navigator.userAgent
          if (ua.indexOf('Trident') != -1 && ua.indexOf('Windows') != -1) {
            // IE内核 并且  windows系统 情况下 才执行;
            var bstr = atob(imgURL.split(',')[1])
            var n = bstr.length
            var u8arr = new Uint8Array(n)
            while (n--) {
              u8arr[n] = bstr.charCodeAt(n)
            }
            var blob = new Blob([u8arr])
            window.navigator.msSaveOrOpenBlob(blob,row.num+'('+row.materialNum+')'+ '.' + 'png')
          } else if (ua.indexOf('Firefox') > -1) {
            //火狐兼容下载
            let blob = this.base64ToBlob(imgURL) //new Blob([content]);
            let evt = document.createEvent('HTMLEvents')
            evt.initEvent('click', true, true) //initEvent 不加后两个参数在FF下会报错  事件类型,是否冒泡,是否阻止浏览器的默认行为
            a.download = row.num+'('+row.materialNum+')' //下载图片名称,如果填内容识别不到,下载为未知文件,所以我这里就不填为空
            a.href = URL.createObjectURL(blob)
            a.dispatchEvent(
              new MouseEvent('click', {
                bubbles: true,
                cancelable: true,
                view: window
              })
            ) //兼容火狐
          } else {
            //谷歌兼容下载
            img.src = myCanvas[0].toDataURL('image/jpg')
            // a.href = myCanvas[0].toDataURL('image/png').replace('image/png', 'image/octet-stream')
            a.href = img.src
            //设置下载文件的名字
            a.download =  '二维码下载图片名称'
            //点击
            a.click()
          }       
       }
    }
  }
</script>

<style>
.div-box {
    width:fit-content;
    height:fit-content;
    padding: 2px;
    border: 1px dashed #f69c55;
    position: relative;
    text-align: center;
}
</style>

 

### 实现 Vue2 动态生成二维码图片 为了在 Vue2 中实现动态生成二维码图片的功能,可以借助 `qrcode` 或者专门的库如 `vue-qrcode-reader` 来完成。以下是详细的解决方案: #### 使用 `qrcode` 库 可以通过引入 JavaScript 的 QRCode 生成库(例如 `qrcode`),并结合 Vue 组件的方式实现在前端生成二维码。 安装依赖: ```bash npm install qrcode --save ``` 创建一个简单的 Vue 组件来展示二维码功能: ```html <template> <div> <h3>QR Code Generator</h3> <input v-model="textToEncode" placeholder="Enter text to encode"> <button @click="generateQRCode">Generate QR Code</button> <img :src="qrCodeImage" alt="QR Code" v-if="qrCodeImage"/> </div> </template> <script> import QRCode from 'qrcode'; export default { data() { return { textToEncode: '', qrCodeImage: null, }; }, methods: { async generateQRCode() { try { const url = await QRCode.toDataURL(this.textToEncode); this.qrCodeImage = url; } catch (error) { console.error('Error generating QR code:', error); } }, }, }; </script> ``` 上述代码实现了输入框接收要编码的内容,并通过按钮触发生成二维码的操作[^1]。 --- #### 使用 `vue-qrcode-reader` 插件 如果希望更方便地集成二维码生成功能,可以选择使用 `vue-qrcode-reader` 这样的插件。该插件提供了开箱即用的支持,适合快速开发场景。 安装依赖: ```bash npm install vue-qrcode-reader --save ``` 配置项目以支持插件: ```javascript // main.js import VueQrcodeReader from 'vue-qrcode-reader'; Vue.use(VueQrcodeReader); ``` 编写组件代码: ```html <template> <div> <h3>QR Code with vue-qrcode-reader</h3> <input v-model="textToEncode" placeholder="Enter text to encode"> <qrcode-capture @decode="onDecode"></qrcode-capture> <canvas ref="qrCanvas"></canvas> </div> </template> <script> export default { data() { return { textToEncode: '', }; }, watch: { textToEncode(newVal) { this.drawQRCode(newVal); }, }, mounted() { if (this.textToEncode) { this.drawQRCode(this.textToEncode); } }, methods: { drawQRCode(text) { const canvas = this.$refs.qrCanvas; const ctx = canvas.getContext('2d'); import('qrcode').then(QRCode => { QRCode.toCanvas(canvas, text, function(error) { if (error) console.error(error); }); }); }, onDecode(decodedString) { alert(`Decoded string is ${decodedString}`); }, }, }; </script> ``` 此方法利用了 `vue-qrcode-reader` 提供的 `<qrcode-capture>` 组件捕获二维码的同时也允许手动绘制二维码图像。 --- #### 调试优化建议 对于调试 Vue.js 应用程序,推荐使用 Chrome 扩展工具如 **Vue.js Devtools** 和其他辅助工具,这些工具有助于实时查看组件状态以及性能分析[^2]。 另外,在实际应用中可能还需要考虑跨平台兼容性和不同环境下的行为差异。例如,在 App 端运行时可通过条件编译判断当前平台并调整逻辑[^3]。 --- ###
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值