vue&微信小程序中生成二维码或条形码

605 阅读2分钟

在 Vue 项目和微信小程序中生成二维码和条形码可以通过不同的库和工具实现。下面是详细的步骤和方法来在这两种环境中生成二维码和条形码。

1. 在 Vue 项目中生成二维码和条形码

1.1 使用 qrcodejsbarcode

  • 二维码生成:可以使用 qrcode 库。
  • 条形码生成:可以使用 jsbarcode 库。

1.1.1 安装库

npm install qrcode jsbarcode

1.1.2 生成二维码

QRCodeGenerator.vue

<template>
  <div>
    <div ref="qrcode"></div>
  </div>
</template>

<script>
import QRCode from 'qrcode';

export default {
  mounted() {
    this.generateQRCode('https://example.com');
  },
  methods: {
    async generateQRCode(text) {
      try {
        const qrCodeDataURL = await QRCode.toDataURL(text);
        const img = document.createElement('img');
        img.src = qrCodeDataURL;
        this.$refs.qrcode.appendChild(img);
      } catch (error) {
        console.error('Error generating QR code:', error);
      }
    }
  }
};
</script>

<style scoped>
/* 可选的样式 */
</style>

1.1.3 生成条形码

BarcodeGenerator.vue

<template>
  <div>
    <svg ref="barcode"></svg>
  </div>
</template>

<script>
import JsBarcode from 'jsbarcode';

export default {
  mounted() {
    this.generateBarcode('123456789012');
  },
  methods: {
    generateBarcode(text) {
      JsBarcode(this.$refs.barcode, text, {
        format: 'EAN13', // 你可以选择其他条形码格式
        width: 2,
        height: 100,
        displayValue: true
      });
    }
  }
};
</script>

<style scoped>
/* 可选的样式 */
</style>

2. 在微信小程序中生成二维码和条形码

2.1 使用微信小程序 API

2.1.1 生成二维码

微信小程序内置了 wx.createCanvasContextwx.canvasToTempFilePath 方法,可以用于生成二维码。

qrcode.wxml

<view>
  <canvas canvas-id="qrcodeCanvas" style="width: 300px; height: 300px;"></canvas>
</view>

qrcode.js

Page({
  onLoad() {
    this.generateQRCode('https://example.com');
  },
  generateQRCode(url) {
    const ctx = wx.createCanvasContext('qrcodeCanvas', this);
    
    // 创建二维码并绘制到画布
    wx.request({
      url: 'https://api.qrserver.com/v1/create-qr-code/?size=300x300&data=' + encodeURIComponent(url),
      responseType: 'arraybuffer',
      success: res => {
        const arrayBuffer = res.data;
        const buffer = new Uint8Array(arrayBuffer);
        const blob = new Blob([buffer], { type: 'image/png' });
        const imgSrc = URL.createObjectURL(blob);
        
        ctx.drawImage(imgSrc, 0, 0, 300, 300);
        ctx.draw();
      }
    });
  }
});

2.1.2 生成条形码

生成条形码通常需要外部服务或者使用图形库,因为微信小程序没有内建的条形码生成器。

可以使用外部服务生成条形码:

barcode.wxml

<view>
  <image src="{{barcodeSrc}}" mode="widthFix"></image>
</view>

barcode.js

Page({
  data: {
    barcodeSrc: ''
  },
  onLoad() {
    this.generateBarcode('123456789012');
  },
  generateBarcode(text) {
    wx.request({
      url: 'https://api.barcodes4.me/barcode/c128b/' + text + '.png',
      responseType: 'arraybuffer',
      success: res => {
        const arrayBuffer = res.data;
        const buffer = new Uint8Array(arrayBuffer);
        const blob = new Blob([buffer], { type: 'image/png' });
        const barcodeSrc = URL.createObjectURL(blob);
        
        this.setData({
          barcodeSrc
        });
      }
    });
  }
});

2.2 使用第三方库

2.2.1 weapp-qrcode(二维码生成)

可以使用第三方库 weapp-qrcode 来生成二维码:

  1. 安装:将 weapp-qrcode 添加到小程序项目的 utils 文件夹。

  2. 使用

qrcode.js

import QRCode from '../../utils/weapp-qrcode/qrcode';

Page({
  onLoad() {
    this.generateQRCode('https://example.com');
  },
  generateQRCode(text) {
    const qrcode = new QRCode('qrcodeCanvas', {
      text: text,
      width: 300,
      height: 300
    });
    qrcode.makeCode(text);
  }
});

qrcode.wxml

<canvas canvas-id="qrcodeCanvas" style="width: 300px; height: 300px;"></canvas>

3. 总结

在 Vue 项目和微信小程序中生成二维码和条形码的方法有所不同,但都可以实现基本的功能:

  • Vue 项目:使用 qrcodejsbarcode 库分别生成二维码和条形码。
  • 微信小程序:可以利用微信小程序 API 生成二维码,也可以使用外部服务生成条形码。也有第三方库(如 weapp-qrcode)来简化二维码生成。

根据你的需求选择合适的方法,并根据实际情况调整配置和代码。