当前位置: 首页 > news >正文

react 中将生成二维码保存到相册

需求:生成二维码,能保存到相册

框架用的 react 所以直接 qrcode.react 插件,然后直接用插件生成二维码,这里一定要写 renderAs={‘svg’} 属性,否则会报错,这里为什么会报错???
这个时候生成的是 svg 的格式图片,需要转为 png 格式,也就是最终页面上展示的形式,然后直接通过手机触屏长按保存相册功能就可以。

  1. 安装插件
npm install qrcode.react -save  // 二维码生成插件
npm install html2canvas -save 
  1. 引入
import QRCode  from 'qrcode.react'; 
import html2canvas from 'html2canvas';
  1. 使用
{!this.state.createImgUrl&&<div id="saveImgBox" className={styles.saveImgBox}>
   <QRCode
      id='qrCode'
      value={this.state.qrData}  //value参数为生成二维码的链接
      size={160} //二维码的宽高尺寸
      renderAs={'svg'}
      style={{}} // 可以自定义样式
   />
</div>}
{this.state.createImgUrl&&<div>
  <img src={this.state.createImgUrl} alt="" style={createImgBox}/>
</div>}

// 调接口获取二维码路经,这里主要拿到后端返回的id有用
fetchPersonInfo = () => {
    let path = '/bankUser/personInfo'
    get(path).then(response => {
        let r = response.data
        if (r.code === '00') {
            this.setState({
                personInfo: r.data,
                qrData: (window.location.origin || (window.location.protocol + "//" + window.location.host)) + '/customerType' + '?bankUserId=' + r.data.userId
            },()=>{
              this.saveImg() // 将生成的svg格式二维码,转img,直接长按保存相册
            })
        } else if (r.code === '01') {
            Toast.info(r.codeMsg)
        }
    })
}
// 通过 html2canvas 插件将图片转为 img 格式后,替换原来二维码占位。这样页面上展示的是一张 png 的图片,就可以直接通过长按保存了
saveImg=()=>{
  const node = document.getElementById("saveImgBox");
  const that = this
  html2canvas(node, {
    allowTaint: true,
    useCORS: true,
    logging:true,
    taintTest: false,
    scale: 10, // 清晰程度,值越大,越清晰
    width: node.clientWidth,
    height:node.clientHeight,
  }).then(function(canvas) {
    that.setState({createImgUrl: canvas.toDataURL("image/png")})
  }).catch(function(error){
    console.log(error)
  });
}
http://www.dtcms.com/a/120558.html

相关文章:

  • 实现usb的MTP功能
  • Springboot切换到3.3.4后,使用spring security一些小问题记录
  • 【基于Vue3组合式API的互斥输入模式实现与实践分享】
  • milvus向量数据库客户端安装,attu客户端安装
  • Excel 导入数据到GridControl中的方法
  • C++ - 头文件基础(常用标准库头文件、自定义头文件、头文件引入方式、防止头文件重复包含机制)
  • 多模态大语言模型arxiv论文略读(六)
  • 计算机视觉——为什么 mAP 是目标检测的黄金标准
  • c# 企业级ADB通信示例
  • 使用 new EventSource 实现前端实时通信
  • 数智化重构供应商管理
  • Java大视界:解码航天遥测数据的银河密码——从GB到PB的技术革命
  • Dubbo 注册中心与服务发现
  • 健身管理小程序|基于java微信开发健身管理小程序的系统设计与实现(源码+数据库+文档)
  • Web框架 --- Web服务器和Web应用服务器
  • Baumer工业相机堡盟工业相机如何处理偶发十万分之一或百万分之一几率出现的黑图现象(C#)
  • R语言之mlr依赖包缺失警告之分析
  • 【Redis】——最佳实践
  • 【区块链安全 | 第三十六篇】合约审计之自毁函数
  • 找不到导入的项目“xxx\QtMsBuild\Qt.props”。请确认 Import 声明“$(QtMsBuild)\Qt.props”中计算结果为
  • R语言进行判别分析
  • 十二、buildroot系统 adb登录权限设置
  • GitHub 趋势日报 (2025年04月07日)
  • Axure 列表滚动:表头非常多(横向滚动方向)、分页(纵向滚动) | 基于动态面板的滚动方向和取消调整大小以适合内容两个属性进行实现
  • MySQL表操作
  • 一文详解LibTorch环境搭建:Ubuntu20.4配置LibTorch CUDA与cuDNN开发环境
  • spark 的流量统计案例
  • DeepSeek 全套汇总资料pdf免费下载(最新更新8篇)
  • 【Proteus仿真】【32单片机-A007】PT100热敏温度检测系统设计
  • 【中大厂面试题】阿里巴巴 java 后端 校招 最新面试题