获取二维码内容及内容生成二维码

1,040 阅读2分钟

在近期项目中,需要实现 获取二维码的内容及将已知的链接生成二维码,对此通过以下代码来实现。

获取二维码内容

1.安装插件 npm install jsqr --save

2.插件的使用

import jsQR from 'jsqr';

const code = jsQR(imageData, width, height);
参数说明
imageData一个Uint8ClampedArrayRGBA像素值的形式[r0, g0, b0, a0, r1, g1, b1, a1, ...]。因此这个数组的长度应该是4 * width * height. 该数据与接口的形式相同 ImageData 通常也由 节点模块 返回以用于读取图像。
width解码图片宽度
height解码图片高度

3.完整代码

    function upload(file) {
        // file 为上传二维码得到的文件
        const canvas: any = document.getElementById("canvas"); // 获取canvas
        const URL = window.URL || window.webkitURL; // 兼容
        const url = URL.createObjectURL(file as Blob);   // 获取文件的临时路径(antd upload组件上传的对象为{originFileObj:File},对象中的originFileObj才是file对象)
        const img = new Image();  // 创建图片对象
        img.width = 200;
        img.height = 200;
        img.onload = () => {
          // 根据图片大小设置canvas大小
          canvas.width = 200;
          canvas.height = 200;
          // 释放对象URL所占用的内存
          URL.revokeObjectURL(img.src);
          // 获取canvas
          const context = (canvas as any).getContext("2d");
          // canvas绘制图片
          context.drawImage(this, 0, 0, 200, 200);
          // 通过canvas获取imageData
          const imageData = context.getImageData(0, 0, 200, 200);
          // jsQR识别
          const code = jsQR(imageData.data, imageData.width, imageData.height);
          console.log("QR code", code); // code.data 为二维码内容
        };
    }

将内容生成对应的二维码

1.安装插件 npm install qrcodejs2-fix;

2.插件的使用

import QRCode from 'qrcodejs2-fix';

const generateCode = () => {
  new QRCode(container, {
    text: '',
    width:256,
    height: 256,
    ...
  });
};
参数说明默认值
container容器(二维码容器,比如div)-
text需要编码的内容-
width图片宽度256
height图片高度256
colorDark前景色#000000
colorLight背景色#ffffff
correctLevel容错级别,可设置为:QRCode.CorrectLevel.L、QRCode.CorrectLevel.M、QRCode.CorrectLevel.Q、QRCode.CorrectLevel.H256
typeNumber二维码类型(1-40,输入 0 以自动检测)256

3.完整代码

const generateCode = () => {
  new QRCode(document.getElementById("container"), {
    text: 'https://www.baidu.com',
    width: 200,
    height: 200
  });
};