收藏
回答

FileSystemManager报错tempFilePath must be a string ?

从相册选择照片,然后使用canvas裁剪照片,通过wx.canvasToTempFilePath获取裁剪后的图片临时路径

将裁剪后的临时路径传递给FileSystemManager的saveFileSync()方法,将裁剪后的图片保存到本地,

最后将图片的本地路径传递显示到<image>中

(题外话:为什么不将canvas裁剪的临时路径直接传递给<image> ?

因为实践发现,如果分两次选择图片,后选择并canvas裁剪的图片,会覆盖之前裁剪的图片,即前后两次的临时路径相同)

大概代码如下:

wx.canvasToTempFilePath()
  .then(res => {
      return this.saveImage2Local(res.tempFilePath)
  })

//... 省略 ...
saveImage2Local(tempPath){
    console.log("saveImage2Local.tempPath = " + tempPath)
    
    return wx.getFileSystemManager()
            .saveFileSync({
                "tempFilePath": tempPath,
                "filePath""cliped"})
}


报错如下:

问题1:

运行后log报错:"tempFilePath must be a string", 难道tempPath: "http://tmp/...png"不是string吗?该如何修改?

问题2:

saveFileSync中的参数“filePath”设置为“cliped”, 是不是表示图片会被保存到 /xxx/xxx/cliped/目录下?

问题3:

代码片段中,我在data中定义了OffscreenCanvas对象,想将JS项目改写为TS项目,但是会提示 offscreenCanvas类型不匹配,

尝试过offscreenCanvas: null, offscreenCanvas: '', offscreenCanvas: any 都不行,

到底应该咋写呀?

Page({
  data: {
    offscreenCanvas: null,
  }
})


---------------------------- 以下是代码片段 ---------------------

https://developers.weixin.qq.com/s/hJIhhKm77vGN


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

2 个回答

  • Mr.Zhao
    Mr.Zhao
    2023-03-16

    看看文档吧 传参都不对

    2023-03-16
    有用 1
    回复 12
    • 2023-03-16
      谢谢大佬!我的问题。只看了saveFile()的文档,想当然的以为saveFileSync()的参数与saveFile()一样
      2023-03-16
      回复
    • 2023-03-16
      问题3怎样解决啊?在data中存一个OffscreenCanvas对象,项目改成TypeScript的话,会报类型不匹配。
      2023-03-16
      回复
    • Mr.Zhao
      Mr.Zhao
      2023-03-16回复
      写个代码看看
      2023-03-16
      回复
    • 2023-03-16
      代码片段里写不了TS,图片是建立了一个TS项目截的图,提示:不能将类型“OffscreenCanvas”分配给类型“null”,我试过‘’和any也试过,都不行
      2023-03-16
      回复
    • Mr.Zhao
      Mr.Zhao
      2023-03-16回复
      2023-03-16
      1
      回复
    查看更多(7)
  • 郑钱花
    郑钱花
    2023-03-16

    只是裁剪头像的话,可以纯api实现啊,wx.cropImage。不用canvas这么复杂

    2023-03-16
    有用
    回复 1
    • 2023-03-16
      不是裁头像,代码片段简化了很多
      2023-03-16
      回复
登录 后发表内容