当前位置: 首页 > news >正文

小程序解析二维码: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>
  • 旧canvas【canvas 2d 下】
// 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);},});},
});
  • Canvas 2d
// index.js
import jsQR from "jsqr";Page({data: {msg: "",canvasWidth: 400,canvasHeight: 400,},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.createSelectorQuery().select("#qrcodeCanvas") // 在 WXML 中填入的 id.fields({ node: true, size: true }).exec((res) => {// Canvas 对象this.canvas = res[0].node;const renderWidth = res[0].width;const renderHeight = res[0].height;this.ctx = this.canvas.getContext("2d");// 初始化画布大小const dpr = wx.getWindowInfo().pixelRatio;this.canvas.width = renderWidth * dpr;this.canvas.height = renderHeight * dpr;this.ctx.scale(dpr, dpr);const image = this.canvas.createImage();image.onload = () => {this.ctx.drawImage(image,0,0,this.data.canvasWidth,this.data.canvasHeight);this.process();};image.src = imagePath;});},process() {var imgData = this.ctx.getImageData(0,0,this.canvas.width,this.canvas.height);const decodedResult = jsQR(imgData.data,this.canvas.width,this.canvas.height,{inversionAttempts: "dontInvert",});if (decodedResult) {console.log(decodedResult.data); // 识别结果this.setData({msg: decodedResult.data,});} else {wx.showToast({icon: "none",title: "未识别到二维码!",});}},
});

仅识别黑白类二维码

http://www.lryc.cn/news/340182.html

相关文章:

  • 【verilog 设计】 reg有没有必要全部赋初值?
  • NLP问答系统:使用 Deepset SQUAD 和 SQuAD v2 度量评估
  • php开发中如何防止抓包工具伪造请求
  • 密码学 | 椭圆曲线数字签名方法 ECDSA(下)
  • 拟态个人主页UI源码
  • 移动硬盘无法打开?别慌!这里有救星!
  • windows下已经创建好了虚拟环境,但是切换不了的解决方法
  • Java反序列化基础-类的动态加载
  • 课堂行为动作识别数据集
  • 【数据库】MVCC
  • 快速排序题目SelectK问题
  • es6解构赋值
  • Jenkins上面使用pnpm打包
  • 设计编程网站集:动物,昆虫,蚂蚁养殖笔记
  • 面经学习(众智宏图实习)
  • DataGrip2024安装包(亲测可用)
  • 【InternLM 实战营第二期-笔记4】XTuner 微调个人小助手认知
  • <计算机网络自顶向下> CDN
  • 【Git教程】(十二)工作流之项目设置 — 何时使用工作流,工作流的结构,项目设置概述、执行过程及其实现 ~
  • Java 排序算法
  • 【重磅更新】开源表单系统填鸭表单v5版发布!
  • 保姆级教程 | Adobe Illustrator 中插入数学符号
  • 数据结构——双向循环链表
  • 使用ZLMediaKit搭建服务器实现推流拉流
  • 【拦截器Interceptor】springboot拦截器的使用和原理
  • Android12 user版本无法进入recovery问题
  • Android沙盒机制
  • 【C++】每日一题 290 单词规律
  • CSS3 animation-direction 属性
  • 【mysql 5.7 没有ini 文件,手动添加配置文件】