收藏
回答

【BUG】Canvas在真机中第二次重构时,无法更新组件内容?

出现问题的需求是,使用Canvas组件画出的图可以切换背景图,就是需要在页面上根据传入图片值不断重构新的Canvas,在开发者工具中可以正常重构、保存新图片到本地。

但是发布到手机真机测试时出现问题,接口已经成功返回新的图片,控制台也打印保存到本地的图片地址是新图地址,但是Canvas并没有更新新图,一直是第一次画的图片地址,实际保存到本地的也是第一次的图片

保存图片使用wx.downloadFile,返回值是正常的新图地址,就是Canvas不更新新图

第一次画图使用的

 const query = wx.createSelectorQuery().in(that);
    (query as any)
      .select("#sharePic")
      .fields({ node: true, size: true })
      .exec((res) => {
        const canvas = res[0].node;
        const ctx = canvas.getContext("2d");

        const dpr = wx.getSystemInfoSync().pixelRatio;
        canvas.width = 750 * 1;
        canvas.height = 1220 * 1;
        ctx.scale(11);


        const CanvasD = new CanvasDraw(canvas, ctx);
        that.CanvasD = CanvasD;

        that.canvasImage = ""
        CanvasD.DrawImg2d(that.canvasImagebg).then(() => {
          CanvasD._canvasToPath(that).then((res: string) => {
            console.log("背景图canvasImage-----------", res)
            that.canvasImage = res;
            WXAppSDK.hideLoading();
          });
        });

    });


第二次画图时先清空当前canvas,再次调用1的方法重新画图

      const that = this;
      const query = wx.createSelectorQuery().in(that);
      (query as any)
        .select("#sharePic")
        .fields({ node: true, size: true })
        .exec((res) => {
          const canvas = res[0].node;
          const ctx = canvas.getContext("2d");
          //清空画布
          canvas.width = 750 * 1;
          canvas.height = 1220 * 1;
          ctx.clearRect(0,0,canvas.width,canvas.height)

          that.canvasImage = ""
          console.log("清空画布")
        })


保存图片

    wx.downloadFile({
      url: url,
      success(res) => {
        wx.saveImageToPhotosAlbum({
          filePath: canvasImage,
          success(img) => {
            console.log("图片保存成功",img, canvasImage);
            WXAppSDK.errorMessage("图片保存成功");
          },
          fail() => {
            WXAppSDK.errorMessage("图片保存失败");
          }
        });
      }
    });


开发者工具中图片都能正常重构,真机中可以重构成功返回新图片地址,但是canvas不更新新图片,保存图片也是旧图

最后一次编辑于  2020-08-27
回答关注问题邀请回答
收藏

2 个回答

  • Cjiang
    Cjiang
    2020-08-27

    你好,麻烦提供出现问题的具体机型、微信版本号、系统版本号,以及能复现问题的代码片段(https://developers.weixin.qq.com/miniprogram/dev/devtools/minicode.html

    2020-08-27
    有用
    回复
  • Sound
    Sound
    2020-08-27

    找到问题是createImage创建对象时,开发者工具中正常返回图片,但是在手机中无返回值

    2020-08-27
    有用
    回复
登录 后发表内容
问题标签