评论

weapp-qrcode-canvas-2d在微信小程序中生成二维码,新版canvas-2d接口

weapp-qrcode-canvas-2d是使用新版canvas-2d接口在微信小程序中生成二维码(外部二维码)的js包。canvas 2d 接口支持同层渲染且性能更佳,建议切换使用,可大幅提升速度

weapp-qrcode-canvas-2d

weapp-qrcode-canvas-2d 是使用新版canvas-2d接口在微信小程序中生成二维码(外部二维码)的js包。canvas 2d 接口支持同层渲染且性能更佳,建议切换使用,可大幅提升生成图片的速度。

仓库地址

测试环境

  • 微信小程序基础库版本:2.10.4
  • 开发者工具版本:Stable 1.03.2101150

Usage

先在 wxml 文件中,创建绘制的 canvas,并定义好 width, height, id , type ,其中type的值必须为2d

<canvas type="2d" style="width: 260px; height: 260px;" id="myQrcode"></canvas>

安装方法1:直接引入 js 文件

直接引入 js 文件,使用 drawQrcode() 绘制二维码

// 将 dist 目录下,weapp.qrcode.esm.js 复制到项目中。路径根据实际引用的页面路径自行改变

import drawQrcode from '../../utils/weapp.qrcode.esm.js'

安装方法2:npm安装

npm install weapp-qrcode-canvas-2d --save

// 然后需要在小程序开发者工具中:构建npm

import drawQrcode from 'weapp-qrcode-canvas-2d'

安装完成后调用

例子1:没有使用叠加图片

const query = wx.createSelectorQuery()
query.select('#myQrcode')
    .fields({
        node: true,
        size: true
    })
    .exec((res) => {
        var canvas = res[0].node

        // 调用方法drawQrcode生成二维码
        drawQrcode({
            canvas: canvas,
            canvasId: 'myQrcode',
            width: 260,
            padding: 30,
            background: '#ffffff',
            foreground: '#000000',
            text: 'abc',
        })

        // 获取临时路径(得到之后,想干嘛就干嘛了)
        wx.canvasToTempFilePath({
            canvasId: 'myQrcode',
            canvas: canvas,
            x: 0,
            y: 0,
            width: 260,
            height: 260,
            destWidth: 260,
            destHeight: 260,
            success(res) {
                console.log('二维码临时路径:', res.tempFilePath)
            },
            fail(res) {
                console.error(res)
            }
        })
    })

例子2:使用叠加图片(在二维码中加logo)

const query = wx.createSelectorQuery()

query.select('#myQrcode')
    .fields({
        node: true,
        size: true
    })
    .exec((res) => {
        var canvas = res[0].node

        var img = canvas.createImage();
        img.src = "/image/logo.png"

        img.onload = function () {
            // img.onload完成后才能调用 drawQrcode方法

            var options = {
                canvas: canvas,
                canvasId: 'myQrcode',
                width: 260,
                padding: 30,
                paddingColor: '#fff',
                background: '#fff',
                foreground: '#000000',
                text: '123456789',
                image: {
                    imageResource: img,
                    width: 80, // 建议不要设置过大,以免影响扫码
                    height: 80, // 建议不要设置过大,以免影响扫码
                    round: true // Logo图片是否为圆形
                }
            }

            drawQrcode(options)

            // 获取临时路径(得到之后,想干嘛就干嘛了)
            wx.canvasToTempFilePath({
                x: 0,
                y: 0,
                width: 260,
                height: 260,
                destWidth: 600,
                destHeight: 600,
                canvasId: 'myQrcode',
                canvas: canvas,
                success(res) {
                    console.log('二维码临时路径为:', res.tempFilePath)
                },
                fail(res) {
                    console.error(res)
                }
            })

        };
    })

API

drawQrcode([options])

options

Type: Object

参数 必须 说明 示例
canvas 必须 画布标识,传入 canvas 组件实例
canvasId 绘制的canvasId 'myQrcode'
text 必须 二维码内容 ‘123456789’
width 二维码宽度,与canvaswidth保持一致 260
padding 空白内边距 20
paddingColor 内边距颜色 默认与background一致
background 二维码背景颜色,默认值白色 '#ffffff'
foreground 二维码前景色,默认值黑色 '#000000'
typeNumber 二维码的计算模式,默认值-1 8
correctLevel 二维码纠错级别,默认值为高级,取值:{ L: 1, M: 0, Q: 3, H: 2 } 1
image 在 canvas 上绘制图片,层级高于二维码,v1.1.1+版本支持。具体使用见:例子2 {imageResource: '', width:80, height: 80, round: true}
最后一次编辑于  2023-04-02  
点赞 19
收藏
评论

41 个评论

  • 清渡失眠
    清渡失眠
    2021-09-09

    canvas 斜体无效(新版旧版都无效)怎么解决?


    2021-09-09
    赞同
    回复
  • 罒      鱼爸
    罒 鱼爸
    2021-08-12

    好像有点问题,报了这个错误,不知道怎么回事,(微信小程序不怎么碰...实在是有点....难以言明心情了),版本也是调到了2.10.4,以下是报错:

    VM132 WAService.js:2 thirdScriptErrormodule "utils/weapp.qrcode.esm.js" is not defined;at "pages/2vcode/2vCode" page lifeCycleMethod onReady function
    Error: module "utils/weapp.qrcode.esm.js" is not defined
    


    我是把代码一股脑全部放进了onReady里面,包括引入,而且不知道为什么import引入方式错误,就改用require的方式引用了,不知道是否与这个有关

    /**
      * 生命周期函数--监听页面初次渲染完成
      */
      onReadyfunction () {
        this.createV2code()
      },
      createV2codefunction () {
        var drawQrcode = require('../../utils/weapp.qrcode.esm.js')
    
    
        console.log(drawQrcode);
        const query = wx.createSelectorQuery()
        query.select('#myQrcode')
          .fields({
            nodetrue,
            sizetrue
          })
          .exec((res) => {
            var canvas = res[0].node
    
    
            // 调用方法drawQrcode生成二维码
            drawQrcode({
              canvas: canvas,
              canvasId'myQrcode',
              width260,
              padding30,
              background'#ffffff',
              foreground'#000000',
              text'大王顶真帅',
            })
    
    
            // 获取临时路径(得到之后,想干嘛就干嘛了)
            wx.canvasToTempFilePath({
              canvasId'myQrcode',
              canvas: canvas,
              x0,
              y0,
              width260,
              height260,
              destWidth260,
              destHeight260,
              success(res) {
                console.log('二维码临时路径:', res.tempFilePath)
              },
              fail(res) {
                console.error(res)
              }
            })
          })
      },
    



    2021-08-12
    赞同
    回复 2
    • 罒      鱼爸
      罒 鱼爸
      2021-08-12
      代码看了以下,似乎也没啥子问题,路径方面也没问题....有点懵逼
      2021-08-12
      回复
    • 收割机
      收割机
      2021-08-13
      路径根据实际引用的页面路径自行改变。另外,引用文件一般放在JS文件的最顶部,而不是放方法或函数里面。
      2021-08-13
      回复
  • Bond
    Bond
    2021-07-20

    报这个错误扫码原因啊这个地方

    2021-07-20
    赞同
    回复 1
    • 收割机
      收割机
      2021-07-20
      create.qrcode.js是哪个库?
      2021-07-20
      回复
  • 根正苗红小韭菜
    根正苗红小韭菜
    2021-05-30

    为啥 切换显示与隐藏后,cavas就不显示了。

    2021-05-30
    赞同
    回复 1
    • 收割机
      收割机
      2021-05-31
      如果您是用wx:if进行判断的话,可能需要重新初始化才行。建议用hidden属性进行显示与隐藏切换
      2021-05-31
      回复
  • 水手
    水手
    2021-05-13

    楼主我用了你的代码好像无用啊

    2021-05-13
    赞同
    回复 1
    • 收割机
      收割机
      2021-05-14
      具体报什么错误?这个对支持库版本有要求,核实下支持库版本
      2021-05-14
      回复
  • 洋洋
    洋洋
    2021-05-12

    页面内容多,有滚动条时,划动二维码位置会错乱,有人遇到了没,要怎么解决

    2021-05-12
    赞同
    回复 1
    • 收割机
      收割机
      2021-05-12
      这种情况貌似只在开发者工具上出现,真机上不会
      2021-05-12
      回复
  • 洋洋
    洋洋
    2021-05-12

    页面内容多,有滚动条时,划动二维码位置会错乱

    2021-05-12
    赞同
    回复
  • 竹三
    竹三
    2021-05-07

    var canvas = res[0].node

    这行代码会报错,res为null

    请问如何解决啊

    我再canvas标签里加了个wx:if语句就会报这个错

    或者canvas外面包了两层view标签也会报错

    2021-05-07
    赞同
    回复 6
    • 收割机
      收割机
      2021-05-08
      用wx:if的话是因为初始化的时候找不到canvas节点,所以会报错。建议通过绝对定位隐藏节点的方式在页面呈现canvas,而并不是通过wx:if去控制。
      2021-05-08
      1
      回复
    • 竹三
      竹三
      2021-05-10回复收割机
      谢谢,我用了hidden属性解决了。
      最近又有个新bug,电脑上调试的时候是可以成功生成二维码的,但是在真机调试的时候就报错,我看好多人都遇到这个问题了,不知道是不是小程序工具的问题。
      2021-05-10
      回复
    • 收割机
      收割机
      2021-05-10回复竹三
      真机调试会有个bug。可以直接真机预览,真机预览是可以的
      2021-05-10
      2
      回复
    • 收割机
      收割机
      2021-05-10回复竹三
      另外,这个库是不支持PC端小程序的
      2021-05-10
      1
      回复
    • 相濡以沫
      相濡以沫
      2021-05-25回复收割机
      不能支持下pc端小程序吗
      2021-05-25
      回复
    查看更多(1)
  • 马特:啊对对对
    马特:啊对对对
    2021-03-26

    这个工具有点小毛病,建议大家下载源码,然后自己改动源码

    2021-03-26
    赞同
    回复 1
    • 收割机
      收割机
      2021-03-27
      请问下是什么毛病呢?
      2021-03-27
      回复
  • 生活契约
    生活契约
    2021-02-25

    楼主你好,,我想问一下text这个参数可以传一个页面的地址吗,,我想要分享一个带操作的页面,试了一下text传页面地址是不生效的

    2021-02-25
    赞同
    回复 5

正在加载...

登录 后发表内容