uniapp中生成随机的二维码并进行保存

2023-05-16

需求:需要根据用户id的不同生成不同的二维码,并进行本地保存
在这里插入图片描述

第一步:下载插件

这里对于二维码的生成,使用的是第三方插件weapp.qrcode.min.js,主要用到的文件是 /dist/weapp-qrcode.js 文件。
github地址:https://github.com/yingye/weapp-qrcode#readme

将第三方插件的文件放到项目的工具文件夹中,便于使用
在这里插入图片描述

第二步:引入插件

在需要的页面进行插件的引用
在这里插入图片描述

第三步:绘制区域在这里插入代码片

在这里插入图片描述

 <canvas class="code"
         canvas-id="myQrcode"
         style="background:white;
         width: 250rpx;
         height:250rpx;" />

第四步:绘制二维码


 data(){
            return{
               qrcode:"",//导出的二维码图片
               textcode:""//获取到的二维码字符串
            }
        },
 onLoad: function () {
            this.createCode()
   },
   //主要是生成二维码的字符串
   createCode(){
            let that = this;
            const userId = uni.getStorageSync('loginResult').userId
            let params = {
                    url: '/outer/dy/getAuthUri',
                    method: 'GET',
                    data: {
                        userId :userId
                    },
                    callBack: (res) => {
                        that.textcode=res
                        // 调用二维码的生成
                        this.codeqrcode()
                    }
                }
                http.request(params);
            },

//绘制二维码
  codeqrcode () {
                let that = this;
                new Promise((resolve) => {
                    wx.getImageInfo({
                        success: (res) => {
                            resolve(res.path);
                        },
                        fail: () => {
                            resolve();
                        }
                    })
                }).then((path) => {
                    let options = ('canvas', {
                        width: that.createRpx2px(250),
                        height: that.createRpx2px(250),
                        canvasId: 'myQrcode',
                        text: that.textcode,//这是绘制二维码的字符串
                        callback: (res) => {
                            // 把当前画布指定区域的内容导出生成指定大小的图片,并返回文件路径。
                            setTimeout(() => {
				              wx.canvasToTempFilePath({
				                canvasId: 'myQrcode',
				                x: 0,
				                y: 0,
				                width: that.createRpx2px(300),
				                height: that.createRpx2px(300),
				                success: (res) => {
				                  that.setData({ qrcode: res.tempFilePath });
				                }
				              })
				            }, 0);
                        }
                    })
                    QRCode(options);
                })
                },
			//该方法主要是将px单位转换为rpx
            createRpx2px (rpx) {
                return wx.getSystemInfoSync().windowWidth / 750 * rpx
                },

第五步 对生成的二维码进行本地保存

在这里插入图片描述

 savecode(){
                uni.saveImageToPhotosAlbum({
                filePath: this.qrcode,
                success: function () {
                    uni.showToast({
                        title:"保存图片至本地相册",
                        icon:"success"
                    })
                 },
                 fail: function() {
					uni.showModal({
						content:'您没打开获取图片功能的权限,是否去设置打开?',
						confirmText: "确认",
						cancelText:'取消',
						success: (res) => {
							if(res.confirm){
								uni.openSetting({
									success: () => {
										uni.showToast({
											title: "请重新点击保存图片~",
											icon: "none"
										});
									}
								})
							}else{
								uni.showToast({
									title: "保存失败,请打开权限功能重试",
									icon: "none"
								});
							}
						}
					})
				}
                });
            },

授权的处理

 authorization () {
      var params = {
        url: "/user/expertInfo",
        method: "GET",
        data: {
          size: this.size,
          current: this.current
        },
        callBack: (res) => {
          uni.hideLoading();
          //   如果有返回值
          if (Boolean(res)) {
            this.setData({
              nickName: res.nickName,
              pic: res.pic
            });
            uni.showToast({
              title: "授权成功",
              icon: "success",
              duration: 1000
            });
            const eventChannel = this.getOpenerEventChannel()
            let obj = {
              nickName: this.nickName,
              pic: this.pic
            }
            eventChannel.emit('acceptDataFromOpenedPage', { data: JSON.stringify(obj) });
            uni.navigateBack({
              delta: 1,
            });
          }
          else {
            uni.showToast({
              title: '授权失败',
              icon: 'error'
            })
            setTimeout(() => {
              uni.redirectTo({
                url: '/packageActivities/pages/authorization/authorization'
              });
            }, 1000)
          }
        }

      };
      http.request(params);
    }

微信小程序的长按保存方法二:

在这里插入图片描述

<image show-menu-by-longpress src='http://125.124.10.5:81/dfs2/group1/M00/00/35/CtosLGGAzluAABA_AAbExELpGPY989.png' class='img'></image>
 onLoad () {
    // show-menu-by-longpress核心js代码:
    //
    wx.canIUse('image.show-menu-by-longpress')

    // 获取用户系统信息的js代码:show-menu-by-longpress和基础库的版本有关系(兼容性差的)
    wx.getSystemInfo({ /* 获取系统信息 */
      success: (res) => {
        console.log('微信版本号:', res.version, ';客户端基础库版本:', res.SDKVersion, ';设备型号:', res.model, ';操作系统及版本:', res.system)
      }
    })
  },

微信小程序的长按保存方法三:

在这里插入图片描述

  <image @longpress="previewImage" 
  data-url="https://xcx.hzxsykj.cn:1443/dfs2/group1/M00/00/35/CtosLGGAzluAABA_AAbExELpGPY989.png"  src='http://125.124.10.5:81/dfs2/group1/M00/00/35/CtosLGGAzluAABA_AAbExELpGPY989.png' class='img'></image>

 // 长按保存的兼容方案
    previewImage (e) {
      console.log(
        '长安使劲按', e
      )
      let that = this
      wx.showActionSheet({
        itemList: ['保存到相册'],
        success (res) {
          let url = e.currentTarget.dataset.url
          wx.getSetting({
            success: (res) => {
              if (!res.authSetting['scope.writePhotosAlbum']) {
                wx.authorize({
                  scope: 'scope.writePhotosAlbum',
                  success: () => {
                    // 同意授权
                    that.saveImgInner(url)
                  },
                  fail: (res) => {
                    console.log(res)
                    wx.showModal({
                      title: '保存失败',
                      content: '请开启访问手机相册权限',
                      success (res) {
                        wx.openSetting()
                      }
                    })
                  }
                })
              } else {
                // 已经授权了
                that.saveImgInner(url)
              }
            },
            fail: (res) => {
              console.log(res)
            }
          })
        },
        fail (res) {
          console.log(res.errMsg)
        }
      })
    },
    saveImgInner (url) {
      wx.getImageInfo({
        src: url,
        success: (res) => {
          let path = res.path
          wx.saveImageToPhotosAlbum({
            filePath: path,
            success: (res) => {
              console.log(res)
              wx.showToast({
                title: '已保存到相册'
              })
            },
            fail: (res) => {
              console.log(res)
            }
          })
        },
        fail: (res) => {
          console.log(res)
        }
      })
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

uniapp中生成随机的二维码并进行保存 的相关文章

  • c++头文件及函数

    目前小编只了解到这些 xff0c 如果还有其他的一些头文件或函数 xff0c 欢迎评论区留言或者私信小编 xff0c 谢谢大家的观看 1 include lt iostream gt system pause 系统暂停 system mod
  • 将Ubuntu虚拟机架设到GNS3拓扑网络上并进行TCP协议仿真分析

    目录 前言环境配置 xff08 将Ubuntu虚拟机挂载到GNS3拓扑网络上 xff09 配置Ubuntu虚拟机GNS3拓扑网络配置先进行一下数据传输检验通路是否正常 开始实验task1 TCP传输过程中的IP分片task2 TCP请求与一
  • HTTP协议---工作原理&报文详情&完整请求过程

    1 工作原理 1 1 OSI 七层模型 OSI xff08 Open System Interconnection xff0c 开放系统互连 xff09 七层网络模型称为开放式系统互联参考模型 xff0c 是一个逻辑上的定义 xff0c 一
  • Makefile和CMake的简单入门

    Makefile和CMake的简单入门 从源代码到可执行文件Makefile的产生背景从make的调用到MakefileMakefile的基本格式Makefile的扩展用法Makefile的生成和部署 一 从源代码到可执行文件 当编译文件依
  • ubuntu搭建HTTP服务器

    1 首先安装apache2工具 sudo apt get update sudo apt get install apache2 apache2安装成功后 xff0c 我们可以在 var www html 目录下看到一个index html

随机推荐

  • 2021 大学生电子设计竞赛 G题 无人机 识别部分

    硬件解决方案 前视OpenMV与下视OpenMV 赛题整体解决方案 视觉只负责识别部分 采用定焦镜头 OpenMV只负责发送像素坐标系下的坐标信息 其他解算等决策部分均由嵌入式控制解决 解决思想 xff1a 围绕田地即地图中的绿色边缘巡航喷
  • c++:不使用STL标准模板库,实现双端队列

    c 43 43 xff1a 不使用STL标准模板库 xff0c 实现双端队列 文章目录 c 43 43 xff1a 不使用STL标准模板库 xff0c 实现双端队列0 简介1 怎么写1 1思路1 2代码 2 结尾 0 简介 最近一个实验验收
  • Android Android Studio 4.0 牛逼功能预览

    作者 xff1a wanbo 地址 xff1a https juejin im post 5db8cee351882557134d0411 新的 Android Studio 4 0 更换了全新的启动界面 xff0c 在今天 Google
  • Qt学习笔记之类继承关系图

  • C++:头文件递归包含问题(互相包含问题)

    目录 引言初始版本头文件守卫递归包含会怎么样为什么会出错前置声明是什么如何解决递归包含问题参考 引言 最近正在疯狂补技术债 xff0c 以及疯狂赶项目 大一大二摸的鱼终归是要还的 xff0c 也奉劝大家少摸鱼 xff0c 不然临近找工作可能
  • 拓展:示波器使用_波形分析

    这里主要对上一个练习中的波形图来拓展 xff0c 讲讲怎么在示波器输出的波形图中 xff0c 对该界面上的一些功能的使用 01 关于适应全屏 放大 缩小 对于输出波形 xff0c 经常要用到的即是适应屏幕 xff0c 以及放大缩小 xff0
  • 【已解决】element-ui组件嵌套太多层,导致内部el-input和el-select 等组件无法正常输入解决方案

    如果 element ui 组件嵌套太多层 xff0c 可能会导致内部的 el input 和 el select 等组件无法正常输入 出现这种问题通常是由于 z index 属性设置不正确导致的 解决这个问题的方法是调整组件的 z ind
  • 两个半天一刷Ubuntu入门指令

    目录 两个半天一刷Ubuntu入门指令 一 Ubuntu初次体验 二 设备驱动 三 Ubuntu用户组及其权限分配 四 压缩解压 五 Linux连接文件 六 vim编辑器 七 Linux下C编程 八 gcc和make及其Makefile的引
  • ENV环境配置及其下载网络组件包问题

    准备工作 Env 工具包含了 RT Thread 源代码开发编译环境和软件包管理系统 从 RT Thread 官网下载 Env 工具 在电脑上装好 git xff0c 软件包管理功能需要 git 的支持 git 的下载地址为https gi
  • 芯片flash保护(解锁)

    报错结果 Error while accessing a target resource The resource is perhaps notavailable 就是无法下载程序 解决办法 1 下载ST LINK Utility 链接 x
  • 2.RTT-点灯大师的修炼

    1 创建工程模板 相信大家通过学习上一篇文章 1 RTT 环境搭建 现在能熟练的创建一个标准模板了 xff0c 如果不会就跳回去学习一下吧 链接 xff1a 1 RTT 环境搭建 嵌入式路上的流浪的博客 CSDN博客 建立好的工程模板编译并
  • 4.RTT-UART-中断接收及轮询发送

    本期博客开始分享RTT的UART xff0c 利用战舰V3的uart2来输入输出一些字符串 UART xff08 Universal Asynchronous Receiver Transmitter xff09 通用异步收发传输器 xff
  • 12.RTT-IIC设备-AHT10温湿度传感器

    本系列博客更新结束啦 xff01 完结啦 xff01 xff01 xff01 撒花 xff01 xff01 xff01 关于RTT的设备和驱动专题更新完毕啦 xff0c 本期是最后一期 一段学习旅途的结束意味着下一段学习冒险的开始 虽然本系
  • RTduino+sht31温湿度传感器

    本次博客使用的是STM32F103C8T6 xff0c 因为该BSP已经对接好RTduino了可以直接上手使用 一 RTduino简介 RTduino是RT Thread实时操作系统的Arduino生态兼容层 xff0c 为RT Threa
  • 一文揭秘字节跳动、华为、京东的薪资职级

    声明 xff1a 本文所有数字均不是官方数据 xff0c 为网络资料收集整理 字节跳动 01 全球员工总数 字节的员工数量目前超过5万人 图片来源 xff1a 字节范 02 岗位职级 字节跳动的职级研发序列一共10级 xff1a 字节跳动创
  • ESP_C3在ubuntu下运行RT-Thread

    1 clone源代码RT Thread git clone git 64 github com RT Thread rt thread git 2 开始搭建ESP IDF环境 进入源码到bsp文件夹下找到ESP32 C3 xff0c 开始配
  • uniapp中使用弹出层

    uniapp中使用弹出层 因为业务的需要 xff0c 需要弹出一个复选框 xff0c 使用uniapp中自带的框架 使用 xff1a 第一步 xff1a 下载下示例项目 xff0c 找到主要的文件夹 第二步 xff1a 将该文件夹放到组件的
  • 手写一个uniapp的步骤条组件

    span class token operator lt span template span class token operator gt span span class token operator lt span view span
  • uniapp中的分页

    数据量过多就会使用分页 第一种 xff1a API span class token comment 和data同级 span span class token function variable function onReachBotto
  • uniapp中生成随机的二维码并进行保存

    需求 xff1a 需要根据用户id的不同生成不同的二维码 xff0c 并进行本地保存 第一步 xff1a 下载插件 这里对于二维码的生成 xff0c 使用的是第三方插件weapp qrcode min js xff0c 主要用到的文件是 d