小程序生成二维码图片保存相册并分享到朋友圈

2023-11-09

小程序echarts+canvasdrawer实现页面转化图片并保存到相册

场景:小程序测试活动,实现echarts雷达图展示不同的结果、微信头像、二维码、测试结果文字,最终绘制出一张图片用户保存相册。考虑到开发时间及各种坑使用了canvasdrawer组件,其中开发过程中遇到的一些问题总结。

1.安卓部分机型图片输出不执行

  • 安卓输出图片错位问题同样异步解决
  • measureText注意线上版本库1.9.1+
//业务层代码
let that = this
    // 保存图片到临时的本地文件
    //注意chart初始化实例不能输出图片
    const ecComponent = this.selectComponent('#mychart-dom-graph');//获取echarts组件
    ecComponent.canvasToTempFilePath({
    //安卓机型此处不会成功回调
      success: res => {
        that.eventDraw(res.tempFilePath)
      },
      fail: res => console.log('失败', res)
});

//ec-canvas.js源码
canvasToTempFilePath(opt) {
      if (!opt.canvasId) {
        opt.canvasId = this.data.canvasId;
      }
      const system = wx.getSystemInfoSync().system
      ctx.draw(true, () => {//此处微信api在安卓部分机型不会回调 ,相反ctx.draw(false)清空画布会执行,导致echarts已经绘制画布清空,输出为空图片         
          wx.canvasToTempFilePath(opt, this);
      });  
    }
//修改后
canvasToTempFilePath(opt) {
      if (!opt.canvasId) {
        opt.canvasId = this.data.canvasId;
      }
      const system = wx.getSystemInfoSync().system
      if (/ios/i.test(system)) {
        ctx.draw(true, () => {          
          wx.canvasToTempFilePath(opt, this);          
        });  
      } else {//针对安卓机型异步获取已绘制图层
      ctx.draw(true,()=>{
        //断点打印依旧不会执行setTimeout(() => {wx.canvasToTempFilePath(opt, this);}, 1000);}});
        ctx.draw(true);
        setTimeout(() => {//延迟获取
          wx.canvasToTempFilePath(opt, this);
        }, 1000);
      }
    },
复制代码

2.onReady动态修改echarts[options]失败

 onReady: function() {
    let that = this;
    setTimeout(() => {//异步解决echarts实例没有加载成功的无法设置options
      option.series[0].data[0].value = that.data.canvasListData
      chart.setOption(option);
    }, 500);
  }
<!--备注-->
//提前声明变量
let chart = null;
var option = {}
复制代码

3.网络图片需下载到本地,注意配置downloadFile合法域名,尤其是微信头像链接

4.相册授权拒绝后,button不会再次弹出授权弹窗,openSetting强制打开设置开启授权。

5.圆形头像建议切镂空图覆盖,rect,clip有bug很难实现UI效果

建议查看:微信小程序社区的帖子。

6.cancvas要画2倍图,否则输出图片模糊

参考

最后

HTML页面可以使用 html2canvas转换节点生成图片保存

TIPS

由于时间限制,很多地方理解不够深刻,瑕疵很多,欢迎提出

转载于:https://juejin.im/post/5c20aad7f265da61171cbd3c

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

小程序生成二维码图片保存相册并分享到朋友圈 的相关文章

随机推荐

  • Sublime Text3 SublimeREPL python

    首先什么是REPL A Read Eval Print Loop REPL is available both as a standalone program and easily includable in other programs
  • qt之利用lineEdit设置密码样式

    参考博客 https blog csdn net u012288722 article details 77850974 主要参考以上大神博客实现如下 可能需要加上头文件 include
  • v8学习---添加js全局函数

    v8学习 添加js全局函数 标签 v8 2013 11 10 10 11 951人阅读 评论 0 收藏 举报 分类 v8 12 版权声明 本文为博主原创文章 未经博主允许不得转载 cpp view plain copy include
  • URL 链接中 井号#、问号?、连接符& 分别有什么作用?

    井号 表示网页中的一个位置 被称之为锚点 常用于某个网页间不同位置的跳转 简单的说就是在一个网页中 URL 不变的情况下 通过添加 buy 的字符在 URL 最后可以跳转到当前网页中已经定义好的锚点 id buy 位置 同样 的改变也会增加
  • APPIcon生成

    有两种生成方法 比较常用 一种是设计师常用的 在线生成图标 https icon wuruihong com 支持 jpg png psd 文件 可以生成圆角 可以自定义大小 生成后可以预览 模拟手机屏幕的效果预览 第二种就是终端生成 利用
  • PyTorch&CUDA安装过程及测试

    PyTorch CUDA安装过程及测试 1 准备工作 1 1 Anaconda NVDIA驱动 之前安装过了Anaconda和NVIDIA驱动 所以直接跳过这几步 打开NVIDIA控制面板 帮助 gt 系统信息 gt 组件 查看自己的CUD
  • 亲!了解一下开源许可协议呗?

    哈喽 大家好 我是指北君 今天我来给大家简单讲讲开源许可协议 只有了解开源许可协议 才能合法合理地使用各种开源软件 并保护自己的合法权益 一 开源许可协议的目标 开源许可协议 也称 许可证 它是一些开源支持组织为了激励和保护开源软件开发者的
  • cortex M3/M4内核 特权级与用户级详解

    一 程序运行为什么要有用户级与特权级区分 用户级和特权级的实现是为了给存储器提供一种保护机制 让用户代码不能访问特定的存储区域 只有特权级级代码才能有权限访问特定的存储区域 防止用户代码或者应用代码意外或恶意访问操作系统的数据存储区域 一般
  • MySQL(17)MySQL数据类型:日期和时间类型

    日期和时间类型 MySQL 中有多处表示日期的数据类型 YEAR TIME DATE DTAETIME TIMESTAMP 当只记录年信息的时候 可以只使用 YEAR 类型 每一个类型都有合法的取值范围 当指定确定不合法的值时 系统将 零
  • discuz密码找回:忘记UCENTER创始人密码

    1 通过ftp工具连接您的虚拟主机在网站根目录uc目录下的子目录 data中找到文件config inc php 注意 不是跟目录data 是uc server data 2 通过代码编辑器打开它 找到类似以下代码 define UC FO
  • win下处理器组概念

    微软官方文档 https docs microsoft com en us windows win32 procthread processor groups 译文如下 64位版本的Windows 7和Windows Server 2008
  • 字符串拆分--spilt()

    待补充
  • python3关于标识符global的理解

    我有个需求是在两个类 在同一个 py模块中 之间 设定一个全局变量供这个两个类来访问 我就打算使用global来实现 但我对于global的用法不是很熟 在查找相关资料后实现了自己的需求 所以特此记录下自己对于python3中global的
  • 【转】一文了解Socket

    原文链接 https segmentfault com a 1190000013712747 什么是Socket Socket的中文翻译过来就是 套接字 套接字是什么 我们先来看看它的英文含义 插座 Socket就像一个电话插座 负责连通两
  • unity:导航系统实例

    在很多游戏中经常会有这样一种功能 鼠标右键点一下地图上的某个地方 角色就会自动前往所点击的地方 或者是点击一下任务就会开启自动寻路 这种功能其实就是导航系统或者叫寻路系统 可以实现自动寻找最近花费代价最低的路径并且会自动躲避障碍物等功能 u
  • 将int类型的数和QString类型的数之间的转换

    参考博客 https blog csdn net yl best article details 80105872 代码中实现的功能为 int a 200 QString text QString number a 10 ui gt lab
  • Devops学习实践(一) SVN安装和配置

    随着工作的要求 devops作为今年工作的一个重点 由此也引发了自己对于devops相关的工具和技术的学习和实践 基于上述背景 这个系列将逐步的介绍SVN的安装和配置 jenkins安装和配置 reviewboard findbugs ch
  • Navicat每次连接MySQL都会产生id_cache.db,id_cache.db-wal,id_cache.db-shm的三个文件

    这三个是Navicat连接数据库时产生的如果没有设置存储位置会直接存储在你的根目录下 看着很难受 Navicat中可以设置其存储位置 选中连接 gt 编辑连接 gt 高级 gt 设置位置
  • 安卓高德地图API根据城市名获取对应的经纬度和地理编码

    private void getLatlon String cityName GeocodeSearch geocodeSearch new GeocodeSearch context geocodeSearch setOnGeocodeS
  • 小程序生成二维码图片保存相册并分享到朋友圈

    小程序echarts canvasdrawer实现页面转化图片并保存到相册 场景 小程序测试活动 实现echarts雷达图展示不同的结果 微信头像 二维码 测试结果文字 最终绘制出一张图片用户保存相册 考虑到开发时间及各种坑使用了canva