微信小程序weapp-qrcode生成二维码图片,长按保存和转发

思路

使用weapp-qrcode在微信小程序里生成二维码,但是这个库只能给你生成到画布上,但是我查看微信小程序官方文档发现画布并没有图片的类似于show-menu-by-longpress这样的属性,所以我们只能通过其他途径把他转成图片。

微信小程序官方文档有canvasToTempFilePath这个 API可以把画布临时转成图片地址,我们把它显示在页面,然后把画布隐藏起来,这样一来就实现了我们想要的结果。

一、安装weapp-qrcode

npm i weapp-qrcode

二、实现步骤

1.使用weapp-qrcode在画布上生成二维码


<button bindtap="showQRCode">生成二维码<button>
<canvas style="width: 200px; height: 200px;" canvas-id="myQrcode" id="myQrcode"></canvas>
import drawQrcode from 'weapp-qrcode'

Page({
    data: {
        showModal: false
    },

    showQRCode() {
        this.setData({
          showModal: true
        })
    
        drawQrcode({
            width: 200,
            height: 200,
            canvasId: 'myQrcode',
            text: '不秃的Summer'
          })
      },

      hideModal() {
        // 关闭弹窗
        this.setData({
          showModal: false
        });
  },

2.把画布上的二维码转换成图片地址显示到页面上

注意:如果想让image组件长按弹起保存和转发的原生弹窗,要加how-menu-by-longpress,默认值是false

<button bindtap="showQRCode">生成二维码<button>
<view show="{{ showModal }}">
    <view class="qr-modal-content" style="background: #000;">
      <image style="width: 200px; height: 200px;" class="qrcode" show-menu-by-longpress="true" src="{{qrcodeUrl}}" mode="aspectFit"></image>
    </view>
  </view>
  <canvas style="width: 200px; height: 200px; position: absolute; top: -999px;" canvas-id="myQrcode" id="myQrcode"></canvas>

这里我先要找到页面上这个画布,然后将画布通过微信自带的API转换成图片

import drawQrcode from 'weapp-qrcode'

Page({
    data: {
        qrcodeUrl: '',
        showModal: false
    },

    showQRCode() {
        let that = this;
            that.setData({
              showModal: true
            })
    
            drawQrcode({
                width: 200,
                height: 200,
                canvasId: 'myQrcode',
                text: '不秃的Summer'
              })

            // 创建一个选择器查询对象
            const query = wx.createSelectorQuery();
            // 执行查询并获取 canvas 节点的实例
            query.select('#myQrcode').boundingClientRect()
            // 查询结束后执行回调函数
            query.exec((res) => {
              if (res[0]) {
                // res[0] 是 canvas 节点信息,确保节点存在
                wx.canvasToTempFilePath({
                  canvasId: 'myQrcode',
                  success(res) {
                    const tempFilePath = res.tempFilePath;
                    console.log(tempFilePath);
                    that.setData({
                      qrcodeUrl: tempFilePath
                    })
                  },
                  fail(err) {
                    console.error( err);
                  }
                });
              } else {
                console.error('未能找到对应的 canvas 节点');
              }
            });
      },

      hideModal() {
        // 关闭弹窗
        this.setData({
          showModal: false
        });
  },

  • 13
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值