小程序蓝牙传输二维码

2023-10-27

有个需求:蓝牙要显示二维码,需要得到二维码的位图(点阵图、矩阵图)。

实现思路:

1.获得canvas的二维码图片,要求为64px乘64px

2.获得二维码的图片,然后解析像素数组,获得像素的二进制状态码

3.将二进制状态码转化为byte数组,然后发送给蓝牙。

 

这里强调一点,draw方法和canvasGetImageData都是异步加载,需要通过promise来做等待处理。

首先,按照网上通用的二维码生成代码实现获得二维码矩阵,使用qrcode.js来获得。

核心代码为draw方法:

/**
	   * 新增$this参数,传入组件的this,兼容在组件中生成
	   */
	  draw: function (str, canvas, cavW, cavH, $this) {
		  console.log("draw");
		  var that = this;
		  // ecclevel = ecc || ecclevel;
		  // console.log("ecclevel>>" + ecclevel);
		  canvas = canvas || _canvas;
		  if (!canvas) {
			console.warn('No canvas provided to draw QR code in!')
			return;
		  }
		  var size = Math.min(cavW, cavH);
		  str = that.utf16to8(str); //增加中文显示
	
		  var frame = that.getFrame(str),
			// 组件中生成qrcode需要绑定this 
			ctx = wx.createCanvasContext(canvas, $this),
			px = (size / (width + 8));
			console.log("width>>1>>" + width);
			console.log("frame>>" + frame);
			console.log("frame.length>>" + frame.length);
		  var roundedSize = px * (width + 8),
			offset = Math.floor((size - roundedSize) / 2);
		  size = roundedSize;
		  //ctx.clearRect(0, 0, cavW, cavW);
		  ctx.setFillStyle('#ffffff')
		  ctx.fillRect(0, 0, cavW, cavW);
		  ctx.setFillStyle('#000000');
		  console.log("width>>2>>" + width);
		  console.log("px>>" + px);
		  for (var i = 0; i < width; i++) {
			for (var j = 0; j < width; j++) {
			  console.log("frame>>i>>" + i + ">>j>>" + j + ">>frame[]>>" + frame[j*width + i]);
			  if (frame[j * width + i]) {
				ctx.fillRect(px * (4 + i) + offset, px * (4 + j) + offset, px, px);
				console.log("(px * (4 + i) + offset>>" + (px * (4 + i) + offset));
			  }
			}
		  }

		return new Promise(function(resolve){
			console.log("drawPromise");
			ctx.draw(false, function(){
				console.log("ctx.draw");
				resolve();
			});
		  });
	  },

然后在显示的界面做image处理操作:

 drawImgPromise: function(){
   console.log("drawImgPromise");
   return new Promise((resolve, reject) =>{
    wx.canvasGetImageData({
      canvasId: "mycanvas",
      height: 64,
      width: 64,
      x: 0,
      y: 0,
      success:function(res){
        console.log("draw>>>>>" + res.data);
        console.log("draw>>>>" + res.data.length);
        var result = new Uint8Array(64 * 64);
        var pos = 0;
        for(var i = 1, len = res.data.length; i < len; i +=4){
          if(res.data[i] == 0){
            result[pos++] = 1;
          }else{
            result[pos++] = 0;
          }
        }
        return resolve(result);
      },
      fail:function(res){
        console.log("fail>>" + res);
        reject(res);
      }
      })
   })
 },

 

调用的代码为:

var QRCode = require("../../mposlib/qrcode/qrcode");

QRCode.api.draw(qrUrl, canvasId, width, height, this)
                    .then(() =>{
                        return this.drawImgPromise()
                        .then((res) =>{
                          order = this.canvasResult(res);
                          console.log("order>>" + utils.ab2hext(order).toUpperCase());
                          console.log("order>>length>>" + order.byteLength);
                        });
                    });

如此,就获得了二维码的点位图。

qrcode.js链接地址

 

wxml需要显示创建一个canvas的对象,因为不需要显示,做了隐藏处理

  <view class="canvas-box">
    <canvas style="width: 686rpx;height: 686rpx;background:#f1f1f1;" canvas-id="mycanvas" />
</view>

wxss文件

.canvas-box{
  position: fixed;
  top: 200%;
}

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

小程序蓝牙传输二维码 的相关文章

  • git lfs linux,Git LFS 操作指南

    Gitee gitee com 已支持 Git LFS 功能 目前该功能针对付费企业开放 Git LFS 简介 Git LFS Large File Storage 大文件存储 是 Github 开发的一个 Git 的扩展 用于实现 Git
  • Node.js安装教程及其简介

    目录 Node js简介 Node js安装教程 案例 步骤一 引入 required 模块 步骤二 创建服务器 分析Node js 的 HTTP 服务器 Node js简介 本质 服务端的JS 引入 required 模块 我们可以使用
  • Java中PrintWriter、BufferedWriter以及BufferredReader基本使用详解

    PrintWriter的使用 PrintWriter 是具有自动行刷新的缓冲字符输出流 这是一个高级流 所谓的自动行刷新 意思就是说 在构造函数中指定autoFlush的值为true时 则 println printf 或 format 方
  • 测试用例_场景法

    场景法 一 应用场合 主要用于测试软件的业务流程和业务逻辑 是一种基于软件业务的测试方法 测试人员把自己当成最终用户 尽可能真实的模拟用于在使用该软件时的各种情景 重点模拟两类操作 模拟用户正确的业务操作流程 验证软件的业务功能是否能够正确
  • 智能车摄像头三轮PID参数调节

    代码已上传CSDN 包含摄像头和PID控制 设置了VIP可取这个小门槛 有兴趣可以点击下方链接自取哈 https download csdn net download weixin 53129688 87714428https downlo
  • 3 个技巧教你轻松查看多开模拟器的端口号~

    此文章来源于项目官方公众号 AirtestProject 版权声明 允许转载 但转载必须保留原链接 请勿用作商业或者非法用途 前言 我们都知道 连接模拟器设备的字符串里 需要填上各个模拟器的端口号 比如雷电模拟器的端口号为5554 auto

随机推荐

  • jsp简单页面计数器

    在制作站点计数器时 如果频繁的访问数数库 比如象哪种每增加一人 便写入数据库或文件的作法 当你的站点有很大的访问量时 必然会影响性能 通常的做法有两种 一是启动一个线程定时写入访问量 二是先在内存中保存访问量 只有当访问量达到一定的数量 比
  • 797. 所有可能的路径

    797 所有可能的路径 难度中等154 给你一个有 n 个节点的 有向无环图 DAG 请你找出所有从节点 0 到节点 n 1 的路径并输出 不要求按特定顺序 二维数组的第 i 个数组中的单元都表示有向图中 i 号节点所能到达的下一些节点 空
  • 如何垂直居中一个浮动元素?

    问题网址 http bbs daxiangclass com thread 163 htm 如何垂直居中一个浮动元素 方法一 已经知道元素高宽 子盒子 div1 width 200px height 200px position absol
  • [Python]网络爬虫(十):一个爬虫的诞生全过程(以山东大学绩点运算为例)...

    先来说一下我们学校的网站 http jwxt sdu edu cn 7777 zhxt bks zhxt bks html 查询成绩需要登录 然后显示各学科成绩 但是只显示成绩而没有绩点 也就是加权平均分 显然这样手动计算绩点是一件非常麻烦
  • android studio 中JAVA文件提示android.support.v7.app.actionbaractivity is deprecated怎样处理?

    出这个提示的地方有写解决办法呀 android support v7 app ActionBarActivity is deprecated use AppCompatActivity instead 意思是 ActionBarActivi
  • 文档工程师

    想做需求工程师 不想做开发了 行不行 请给些意见 悬赏 5 发布时间 2008 06 21 提问人 huihui2525 初级程序员 本人从事软件开发工作1年多 技术上一般般 我是做j2ee的 现在感觉越来越觉得不爱做开发了 我本人性格比较
  • [429]python下安装mayavi

    Mayavi基于Python作为VTK的载体在三维图像的渲染和交互操作方面具有很多优势 最近分析数据的混沌的状态时需要在四维层面上表现数据的效果 首先在matlab tecplot和origin试验了一番 可以说他们都可以实现 但在渲染效果
  • 密码学知识点整理

    序列 流 密码的特点 加解密速度快 无错误扩散 分组 块 密码的特点 应用模式灵活多样 组内有错误扩散 在传统观念里 往往仅注重信息的秘密性 但近代人们认为 信息的真实性 完整性以及不可否认性 在应用上往往比秘密性更重要 密钥的生命周期 密
  • 基于51单片机电子指南针设计程序+原理图+PCB+Proteus仿真+设计报告

    功能介绍 系统采用了磁阻 GMR 传感器采集某一方向磁场强度后通过MCU控制器对其进行处理并显示上传 通过对电子指南针硬件电路和软件程序的分析 阐述了电子指南针基本的工作原理及实现 实际测试指南针模块精度达到1 能够在LCD上显示当前方位并
  • Python免费获取股票业绩预告【附源码】

    在众多的股票量化策略里 我比较钟爱一个策略 净利润断层 直观理解就是在股票的业绩预告 业绩快报 业绩报告等报告出来的时候 因为业绩超预期 股价会有一个跳空高开形成缺口 而且因为上攻力量比较强 这个缺口短期不会回补 而且股价会随着上攻力量越来
  • vue-router 路由超详细教程

    router 路由详细教程 一 前端路由的概念与原理 1 什么是路由 2 SPA与前端路由 3 什么是前端路由 4 前端路由的工作方式 5 实现简易的前端路由 二 vue router的基本用法 1 什么是 vue router 2 vue
  • 【Bus】编写一个Demo虚拟的总线-设备-驱动模型

    文章目录 1 前言 2 总线驱动模型三要素 2 1 总线 2 2 设备 2 3 驱动 3 Demo Code 3 1 virt bus core c 3 2 virt device c 3 3 virt driver c 问题一 virt
  • BOF——Bag-of-Featrures

    本文主要介绍 BOF Bag of Featrures 的原理及其应用 1 1 引言 文档分类领域有一种模型称为词袋 Bag of words 模型 它是自然语言处理与信息检索过程中的一种简化模型 在这种模型中 文本 段落或文档 被视为忽略
  • Docker之网络:容器通信的模式与技术

    Docker的网络基础 默认网络模式 特殊的几种网络模式 容器和宿主机的通信方式 容器与外部主机的通信方式 文章目录 Docker的网络基础 一 Docker默认的原生网络 bridge桥接 二 host模式 三 none模式 四 Dock
  • 代码审计总结

    目录 概述 一 代码审计 1 1什么是代码审计 1 2为什么要执行代码审核 1 3代码审计的好处 二 代码审计流程 2 1代码检查方法 2 2代码检查项目 2 3编码规范 2 4代码检查规范 2 5缺陷检查表 2 6代码审计复查 2 7代码
  • Linux工具 Ansible

    Linux工具 ansible Ansible是一个运维管理工具 可以减少一些重复的配置 比如有几百台主机需要进行相似的配置时或者对所有主机进行某些软件的版本升级时 如果是人工一台一台的配置是非常慢的 也容易出错 毕竟人精力有限 而这个An
  • PowerShell 美化(谁不想要一个好看的终端呢)

    PowerShell 美化 安装powershell Scoop 安装 Oh My Posh 安装 字体设置 应用主题 花里胡哨的折腾 bushi 多种主题任君挑选 安装powershell 地址 https github com Powe
  • neo4j官方示例数据库

    官方示例数据库 CREATE TheMatrix Movie title The Matrix released 1999 tagline Welcome to the Real World CREATE Keanu Person name
  • param.grad为 None或者TypeError: unsupported operand type(s) for *: ‘float‘ and ‘NoneType‘

    在学习李沐的动手学深度学习 从零开始实现softmax回归中 我跟着敲完代码 发现无法运行 报错入如下 TypeError Traceback most recent call last Cell In 72 line 3 1 num ep
  • 小程序蓝牙传输二维码

    有个需求 蓝牙要显示二维码 需要得到二维码的位图 点阵图 矩阵图 实现思路 1 获得canvas的二维码图片 要求为64px乘64px 2 获得二维码的图片 然后解析像素数组 获得像素的二进制状态码 3 将二进制状态码转化为byte数组 然