当前位置:   article > 正文

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

weapp-qrcode

思路

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

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

一、安装weapp-qrcode

npm i weapp-qrcode

二、实现步骤

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

  1. <button bindtap="showQRCode">生成二维码<button>
  2. <canvas style="width: 200px; height: 200px;" canvas-id="myQrcode" id="myQrcode"></canvas>
  1. import drawQrcode from 'weapp-qrcode'
  2. Page({
  3. data: {
  4. showModal: false
  5. },
  6. showQRCode() {
  7. this.setData({
  8. showModal: true
  9. })
  10. drawQrcode({
  11. width: 200,
  12. height: 200,
  13. canvasId: 'myQrcode',
  14. text: '不秃的Summer'
  15. })
  16. },
  17. hideModal() {
  18. // 关闭弹窗
  19. this.setData({
  20. showModal: false
  21. });
  22. },

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

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

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

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

  1. import drawQrcode from 'weapp-qrcode'
  2. Page({
  3. data: {
  4. qrcodeUrl: '',
  5. showModal: false
  6. },
  7. showQRCode() {
  8. let that = this;
  9. that.setData({
  10. showModal: true
  11. })
  12. drawQrcode({
  13. width: 200,
  14. height: 200,
  15. canvasId: 'myQrcode',
  16. text: '不秃的Summer'
  17. })
  18. // 创建一个选择器查询对象
  19. const query = wx.createSelectorQuery();
  20. // 执行查询并获取 canvas 节点的实例
  21. query.select('#myQrcode').boundingClientRect()
  22. // 查询结束后执行回调函数
  23. query.exec((res) => {
  24. if (res[0]) {
  25. // res[0] 是 canvas 节点信息,确保节点存在
  26. wx.canvasToTempFilePath({
  27. canvasId: 'myQrcode',
  28. success(res) {
  29. const tempFilePath = res.tempFilePath;
  30. console.log(tempFilePath);
  31. that.setData({
  32. qrcodeUrl: tempFilePath
  33. })
  34. },
  35. fail(err) {
  36. console.error( err);
  37. }
  38. });
  39. } else {
  40. console.error('未能找到对应的 canvas 节点');
  41. }
  42. });
  43. },
  44. hideModal() {
  45. // 关闭弹窗
  46. this.setData({
  47. showModal: false
  48. });
  49. },

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/650713
推荐阅读
相关标签
  

闽ICP备14008679号