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

小程序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效果

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

6.cancvas要画2倍图,不然输出图片模糊

参考

最后

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

TIPS

因为时间限制,不少地方理解不够深入,瑕疵不少,欢迎提出
相关文章
相关标签/搜索