返回顶部
首页 > 资讯 > 精选 >怎么利用小程序的canvas来绘制二维码
  • 938
分享到

怎么利用小程序的canvas来绘制二维码

2023-06-26 03:06:30 938人浏览 安东尼
摘要

本篇文章给大家分享的是有关怎么利用小程序的canvas来绘制二维码,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。在微信小程序的业务中会有一些需要展示二维码的场景。静态二维码可以

本篇文章给大家分享的是有关怎么利用小程序canvas来绘制二维码,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

微信小程序的业务中会有一些需要展示二维码的场景。静态二维码可以直接存放在本地,使用图片方式展示,但不适合根据用户相关信息生成动态的二维码。下面将介绍下利用小程序的canvas能力绘制二维码。

1 方法一:通过wx-qr直接生成

1.1 DEMO

微信开发工具打开查看


# 通过 npm 安装

1.2 安装

npm i wx-qr -S# 通过 yarn 安装yarn add wx-qr

1.3 使用组件

首先在你所开发的小程序根目录 app.JSON 或需要使用该组件的 xxx.json 中引用组件

(注意:请不要将组件命名为 wx-xxx 开头,可能会导致微信小程序解析 tag 失败 )

{  "usinGComponents": {    "qr-container": "wx-qr"  }}

之后就可以在 wxml 中直接使用组件

<qr-container text="{{qrTxt}}" size="750"></qr-container>
Page({    data: {        qrTxt: 'https://GitHub.com/liuxdi/wx-qr',    },});

当然,还可以支持很多种配置,详见github 或者 码云文档。

2. 方式二:基于QRCode.js结合canvas绘制

2.0 二维码的组成部分

怎么利用小程序的canvas来绘制二维码

定位图案
  • Position Detection Pattern是定位图案,用于标记二维码的矩形大小。这三个定位图案有白边叫Separators for Postion Detection Patterns。之所以三个而不是四个意思就是三个就可以标识一个矩形了。

  • Timing Patterns也是用于定位的。原因是二维码有40种尺寸,尺寸过大了后需要有根标准线,不然扫描的时候可能会扫歪了。

  • Alignment Patterns 只有Version 2以上(包括Version2)的二维码需要这个东东,同样是为了定位用的。

功能性数据
  • FORMat Information 存在于所有的尺寸中,用于存放一些格式化数据的。

  • Version Information 在 >= Version 7以上,需要预留两块3 x 6的区域存放一些版本信息。

数据码和纠错码
  • 除了上述的那些地方,剩下的地方存放 Data Code 数据码 和 Error Correction Code 纠错码。

2.1 引入二维码数据生成库

复制qrcode.js至你的小程序相应目录。

2.2 小程序中建立canvas标签,并给canvas设置长宽

<canvas id="qr" type="2d" style="height: 750rpx;width: 750rpx;"></canvas>

2.3获取canvas实例及上下文

const query = this.createSelectorQuery();let dpr = wx.getSystemInfoSync().pixelRatio;query.select('#qr').fields({ node: true, size: true, id: true })  .exec((res) => {    let { node: canvas, height, width } = res[0];    let ctx = canvas.getContext('2d');    canvas.width = width * dpr    canvas.height = height * dpr    ctx.scale(dpr, dpr);  })

2.4 定义一些变量及绘制二维码的数据码区

其中QRCodeModel是从qrCode.js中导入的

// 二维码的颜色const colorDark = '#000';// 获取二维码的大小,因CSS设置的为750rpx,将其转为pxconst rawViewportSize = getPxFromRpx(750);// 二维码容错率{ L: 1, M: 0, Q: 3, H: 2 }const correctLevel = 0;// 创建二维码实例对象,并添加数据进行生成const qrCode = new QRCodeModel(-1, correctLevel);qrCode.aDDData(url);qrCode.make();// 每个方向的二维码数量const nCount = qrCode.moduleCount;// 计算每个二维码方块的大小const nSize = getRoundNum(rawViewportSize / nCount, 3)// 每块二维码点的大小比例const dataScale = 1;// 计算出dataScale不为1时,每个点的偏移值const dataXyOffset = (1 - dataScale) * 0.5;// 循环行列绘制数据码区for (let row = 0; row < nCount; row++) {  for (let col = 0; col < nCount; col++) {    // row 和 col 处的模块是否是黑色区    const bIsDark = qrCode.isDark(row, col);    // 是否是二维码的图案定位标识区 Position Detection Pattern(如本模块,是三个顶点位置处的大方块)    const isBlkPosCtr = (col < 8 && (row < 8 || row >= nCount - 8)) || (col >= nCount - 8 && row < 8);    // 是否是Timing Patterns,也是用于协助定位扫描的    const isTiming = (row == 6 && col >= 8 && col <= nCount - 8) || (col == 6 && row >= 8 && row <= nCount - 8);    // 如果是这些区域 则不进行绘制    let isProtected = isBlkPosCtr || isTiming;    // 计算每个点的绘制位置(left,top)    const nLeft = col * nSize + (isProtected ? 0 : dataXyOffset * nSize);    const nTop = row * nSize + (isProtected ? 0 : dataXyOffset * nSize);    // 描边色、线宽、填充色配置    ctx.strokeStyle = colorDark;    ctx.lineWidth = 0.5;    ctx.fillStyle = bIsDark ? colorDark : "rgba(255, 255, 255, 0.6)";    // 如果不是标识区,则进行绘制    if (!isProtected) {      ctx.fillRect(        nLeft,        nTop,        (isProtected ? (isBlkPosCtr ? 1 : 1) : dataScale) * nSize,        (isProtected ? (isBlkPosCtr ? 1 : 1) : dataScale) * nSize      );    }  }}

此时已经绘制出二维码的数据码区:

怎么利用小程序的canvas来绘制二维码

2.5 绘制图形识别区

// 绘制Position Detection Patternctx.fillStyle = colorDark;ctx.fillRect(0, 0, 7 * nSize, nSize);ctx.fillRect((nCount - 7) * nSize, 0, 7 * nSize, nSize);ctx.fillRect(0, 6 * nSize, 7 * nSize, nSize);ctx.fillRect((nCount - 7) * nSize, 6 * nSize, 7 * nSize, nSize);ctx.fillRect(0, (nCount - 7) * nSize, 7 * nSize, nSize);ctx.fillRect(0, (nCount - 7 + 6) * nSize, 7 * nSize, nSize);ctx.fillRect(0, 0, nSize, 7 * nSize);ctx.fillRect(6 * nSize, 0, nSize, 7 * nSize);ctx.fillRect((nCount - 7) * nSize, 0, nSize, 7 * nSize);ctx.fillRect((nCount - 7 + 6) * nSize, 0, nSize, 7 * nSize);ctx.fillRect(0, (nCount - 7) * nSize, nSize, 7 * nSize);ctx.fillRect(6 * nSize, (nCount - 7) * nSize, nSize, 7 * nSize);ctx.fillRect(2 * nSize, 2 * nSize, 3 * nSize, 3 * nSize);ctx.fillRect((nCount - 7 + 2) * nSize, 2 * nSize, 3 * nSize, 3 * nSize);ctx.fillRect(2 * nSize, (nCount - 7 + 2) * nSize, 3 * nSize, 3 * nSize);// 绘制Position Detection Pattern 完毕// 绘制Timing Patternsconst timingScale = 1;const timingXyOffset = (1 - timingScale) * 0.5;for (let i = 0; i < nCount - 8; i += 2) {  _drawDot(ctx, 8 + i, 6, nSize, timingXyOffset, timingScale);  _drawDot(ctx, 6, 8 + i, nSize, timingXyOffset, timingScale);}// 绘制Timing Patterns 完毕

这时候,一个朴素的二维码就绘制成功啦~

以上就是怎么利用小程序的canvas来绘制二维码,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注编程网精选频道。

--结束END--

本文标题: 怎么利用小程序的canvas来绘制二维码

本文链接: https://lsjlt.com/news/306447.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 怎么利用小程序的canvas来绘制二维码
    本篇文章给大家分享的是有关怎么利用小程序的canvas来绘制二维码,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。在微信小程序的业务中会有一些需要展示二维码的场景。静态二维码可以...
    99+
    2023-06-26
  • 在微信小程序中怎么使用canvas+Painter插件制作二维码
    本篇内容介绍了“在微信小程序中怎么使用canvas+Painter插件制作二维码”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、实现原理使...
    99+
    2023-06-25
  • 微信小程序中怎么用Canvas绘制图形
    在微信小程序中使用Canvas绘制图形需要以下步骤: 在wxml文件中添加Canvas组件: <canvas canvas...
    99+
    2024-04-03
    微信小程序 Canvas
  • 微信小程序使用canvas绘制钟表
    本文实例为大家分享了微信小程序使用canvas绘制钟表的具体代码,供大家参考,具体内容如下 模拟时钟 利用canvas绘制时钟,实现模拟时钟的功能,钟表时间与系统时间保持一致,刻度将...
    99+
    2024-04-02
  • 使用canvas怎么下载二维码
    这期内容当中小编将会给大家带来有关使用canvas怎么下载二维码,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。一、下载二维码(查看如何生成二维码)HTMLCanvasElement提供了toDataURL...
    99+
    2023-06-09
  • html5中怎么利用Canvas绘制椭圆
    html5中怎么利用Canvas绘制椭圆,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。 概述 HTML5中的C...
    99+
    2024-04-02
  • 微信小程序如何使用canvas绘制钟表
    这篇文章给大家分享的是有关微信小程序如何使用canvas绘制钟表的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。模拟时钟利用canvas绘制时钟,实现模拟时钟的功能,钟表时间与系统时间保持一致,刻度将24小时制转换...
    99+
    2023-06-15
  • php生成小程序二维码乱码怎么办
    本文操作环境:windows7系统、PHP7.4版、DELL G3电脑php生成小程序二维码乱码怎么办?php微信小程序生成二维码,出现乱码,{"errcode":44002,"errmsg":&qu...
    99+
    2015-05-28
    php 二维码
  • 小程序二维码是什么意思
    这篇文章主要介绍小程序二维码是什么意思,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!小程序二维码是小程序的一个关键的入口,商家通过小程序二维码能力可生成跳转自身小程序指定页面二维码,可用于线上线下贴码推广,便捷推广小...
    99+
    2023-06-22
  • 利用canvas怎么绘制一个多边形
    利用canvas怎么绘制一个多边形?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。 初始化js代码  //初始化  (function()...
    99+
    2023-06-09
  • 小程序生成二维码的方法
    这篇文章主要介绍了小程序生成二维码的方法的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇小程序生成二维码的方法文章都会有所收获,下面我们一起来看看吧。  普通链接二维码,是指开发者使用工具对网页链接进行编码后生成...
    99+
    2023-06-26
  • 怎么用HTML5的canvas来绘图
    本文小编为大家详细介绍“怎么用HTML5的canvas来绘图”,内容详细,步骤清晰,细节处理妥当,希望这篇“怎么用HTML5的canvas来绘图”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学...
    99+
    2024-04-02
  • 怎么使用PHP把小程序的二维码转成网址
    这篇文章主要介绍了怎么使用PHP把小程序的二维码转成网址的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇怎么使用PHP把小程序的二维码转成网址文章都会有所收获,下面我们一起来看看吧。一、前提条件在进行转换前需要满...
    99+
    2023-07-05
  • 怎么利用HTML5中的Canvas绘制一张笑脸
    这篇文章主要讲解了“怎么利用HTML5中的Canvas绘制一张笑脸”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么利用HTML5中的Canvas绘制一张笑...
    99+
    2024-04-02
  • 小程序怎么制作小程序码
    这篇文章主要介绍“小程序怎么制作小程序码”,在日常操作中,相信很多人在小程序怎么制作小程序码问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”小程序怎么制作小程序码”的疑惑有所帮助!接下来,请跟着小编一起来学习吧...
    99+
    2023-06-26
  • 使用canvas怎么生成带二维码的海报
    今天就跟大家聊聊有关使用canvas怎么生成带二维码的海报,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。图片不显示绘制渲染的时候图像不显示:是因为图片异步加载,所以canvas的操作...
    99+
    2023-06-09
  • 微信小程序-获取不限制的小程序码(二)
    一、获取小程序码 获取小程序码 | 微信开放文档 与 createQRCode 总共生成的码数量限制为 100,000,请谨慎调用  调用方式 HTTPS 调用 POST https://api.weixin.qq.com/wxa/getw...
    99+
    2023-09-01
    微信小程序
  • 微信小程序API怎么获取页面二维码
    这篇文章主要介绍“微信小程序API怎么获取页面二维码”,在日常操作中,相信很多人在微信小程序API怎么获取页面二维码问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”微信小程序API怎么获取页面二维码”的疑惑有所...
    99+
    2023-06-26
  • 怎么在JavaScript中利用canvas绘制坐标和线
    怎么在JavaScript中利用canvas绘制坐标和线?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。javascript是一种什么语言javascript是一...
    99+
    2023-06-14
  • 怎么在html5中利用canvas绘制一个圆环
    今天就跟大家聊聊有关怎么在html5中利用canvas绘制一个圆环,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。实现过程:首先:html部分代码如下:<canvas ...
    99+
    2023-06-09
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作