收藏
回答

wx.canvasToTempFilePath报错

框架类型 问题类型 API/组件名称 终端类型 操作系统 微信版本 基础库版本
小程序 Bug wx.canvasToTempFilePath 客户端 Android 6.6.6 1.9.98

<canvas style="height:{{canvasSize.height}}px;width:{{canvasSize.width}}px" canvas-id='share-pyq' binderror='canvasIdErrorCallback'></canvas>

(canvas直接在page下)


drawShareCanvas(){

var that = this

......//canvas绘制

this.setData({

      canvasSize: { height: size.height, width: size.width, opacity: 0 }

    })

    ctx.draw(true,that.saveCanvasToFile)

    console.log()

  },

  saveCanvasToFile() {

    var that = this

    wx.canvasToTempFilePath({

      canvasId: 'share-pyq',

      success: function (res) {

......//成功后的操作

      },

      fail(res){

        console.log(res)

      }

    }, that)

}


控制台报错:"canvasToTempFilePath:fail:illegal arguments"

回答关注问题邀请回答
收藏

2 个回答

  • null
    null
    2018-07-23

    完美解决方案,在绘图过程中可能会设置canvas的宽高(this.setData()这是异步的)

    setTimeout(function () {

        ctx.draw(false, function () {

        wx.showLoading({

            title: '努力生成中...'

        })

        wx.canvasToTempFilePath({

            x: 0,

            y: 0,

            canvasId: 'longImgCanvas',

            success: res => {

                console.log(res.tempFilePath);

                wx.previewImage({

                current: res.tempFilePath,

                    urls: [res.tempFilePath]

                });

                wx.hideLoading();

                that.setData({

                    isShowLongImgCanvas: false

                });

            },

            fail: function (res) {

                console.log(res)

            }

            })

        });

    }, 500);


    2018-07-23
    有用 2
    回复 1
    • 2018-09-20

      牛逼,完美解决!!!

      2018-09-20
      回复
  • 神经蛙
    神经蛙
    2018-05-15

    wx.canvasToTempFilePath的第二个参数this指代的是绘图所用的context对象,不是当前page

    2018-05-15
    有用
    回复 4
    • 
      2018-05-15
      我发现是由于setData渲染是异步的,导致紧跟着调用canvasToTempFilePath的时候canvas的大小还没有被重新设置过,所以会报错
      2018-05-15
      回复
    • 
      2018-05-15回复
      然而现在又报错create bitmap failed了,不知道为什么……第二个参数传this和ctx都不行……
      2018-05-15
      回复
    • 神经蛙
      神经蛙
      2018-05-17回复
      微信里执行js 和执行UI渲染是两个线程,所以setData执行完不会实时反馈到UI上,会有延迟
      2018-05-17
      回复
    • 神经蛙
      神经蛙
      2018-05-17回复
      检查下绘制时,画布的宽高等参数有没有问题,比如是0,如果不是,排查下是不是特定设备特定版本的兼容性问题,由于canvas操作会有延时,所以需要考虑每个环节的操作是不是会导致进行B操作时A操作尚未完成。
      2018-05-17
      回复
登录 后发表内容