小程序解析二维码:jsQR

1.了解jsQR

jsQR是一个纯javascript脚本实现的二维码识别库,不仅可以在浏览器端使用,而且支持后端node.js环境。jsQR使用较为简单,有着不错的识别率。

2.效果图

请添加图片描述

3.二维码

在这里插入图片描述

4.下载jsqr

npm i -d jsqr

5.代码

<!-- index.wxml -->
<view class="container">
  <button bindtap="chooseImage">选择图片识别二维码</button>
  <canvas id="qrcodeCanvas" canvas-id="qrcodeCanvas" style="width: {{canvasWidth}}px; height: {{canvasHeight}}px"></canvas>
</view>

<button bind:tap="process">识别</button>
<button style="width: 100vw; margin-top: 20rpx;">识别结果:{{msg}}</button>
// index.js
import jsQR from "jsqr";

Page({
  data: {
    msg: "",
    canvasWidth: 0,
    canvasHeight: 0,
  },

  chooseImage() {
    wx.chooseMedia({
      count: 1,
      mediaType: ["image"],
      sourceType: ["album", "camera"],
      success: (res) => {
        this.decodeQRCode(res.tempFiles[0].tempFilePath);
      },
      fail: (err) => {
        console.error("选择图片失败", err);
      },
    });
  },

  decodeQRCode(imagePath) {
    wx.getImageInfo({
      src: imagePath,
      success: (imageInfo) => {
        this.setData({
          canvasWidth: imageInfo.width,
          canvasHeight: imageInfo.height,
        });

        const canvasId = "qrcodeCanvas";
        const ctx = wx.createCanvasContext(canvasId);

        ctx.drawImage(imagePath, 0, 0, imageInfo.width, imageInfo.height);
        ctx.draw();
      },
      fail: (err) => {
        console.error("获取图片信息失败", err);
      },
    });
  },

  process() {
    wx.canvasGetImageData({
      canvasId: "qrcodeCanvas",
      x: 0,
      y: 0,
      width: this.data.canvasWidth,
      height: this.data.canvasHeight,
      success: (res) => {
        console.log(res);
        const decodedResult = jsQR(
          res.data,
          this.data.canvasWidth,
          this.data.canvasHeight,
          {
            inversionAttempts: "dontInvert",
          }
        );

        console.log("结果", decodedResult);
        if (decodedResult) {
          console.log(decodedResult.data); // 识别结果
          this.setData({
            msg: decodedResult.data,
          });
        } else {
          wx.showToast({
            icon: "none",
            title: "未识别到二维码!",
          });
        }
      },
      fail: (err) => {
        console.error("获取 Canvas 像素数据失败", err);
      },
    });
  },
});

注意:我使用canvas2d不行,如果有可以的请分享一下

相关推荐

  1. 前端如何识别上传的---jsQR

    2024-04-12 20:40:04       19 阅读
  2. 微信程序显示

    2024-04-12 20:40:04       36 阅读
  3. 微信程序保存的过程

    2024-04-12 20:40:04       40 阅读
  4. uniapp程序---(生成、保存)

    2024-04-12 20:40:04       45 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-12 20:40:04       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-12 20:40:04       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-12 20:40:04       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-12 20:40:04       20 阅读

热门阅读

  1. WebKit结构简介

    2024-04-12 20:40:04       22 阅读
  2. [深度学习] 无人车避开赛道边的障碍物

    2024-04-12 20:40:04       21 阅读
  3. 商业智能-BI

    2024-04-12 20:40:04       17 阅读
  4. C++ 多态

    2024-04-12 20:40:04       15 阅读
  5. CLR学习

    CLR学习

    2024-04-12 20:40:04      20 阅读
  6. Spring面试题pro版-3

    2024-04-12 20:40:04       19 阅读
  7. postman怎么生成随机数详细步骤及使用方式

    2024-04-12 20:40:04       44 阅读