收藏
回答

如何解决wx.saveImageToPhotosAlbum 无法保存图片的问题?

报错如图,无法保存图片到相册


相关代码片段1:点击保存图片按钮,一直报错显示“Uncaught (in promise) save image failed”

onLoad: function (options) {
    api.showLoading();
    console.log(app.globalData.picParam);
    let  {x,y,logoHeight, logoWidth, avatarHeight, avatarWidth, logoUrl, avatarUrl} = app.globalData.picParam;
    this.setData({
      canvasWidth: logoWidth,
      canvasHeight: logoHeight
    });
    const ctx = wx.createCanvasContext('avatarPic');
    ctx.drawImage(logoUrl, 0, 0, logoWidth, logoHeight);
    ctx.draw();
    ctx.save(); // 先保存状态 已便于画完圆再用
    ctx.beginPath(); //开始绘制
    //先画个圆
    ctx.arc(x + avatarWidth / 2, y + avatarHeight / 2 , avatarWidth / 2, 0, Math.PI * 2, false);
    ctx.clip();//画了圆 再剪切  原始画布中剪切任意形状和尺寸。一旦剪切了某个区域,则所有之后的绘图都会被限制在被剪切的区域内
    ctx.drawImage(avatarUrl, x, y, avatarWidth, avatarHeight);
    ctx.draw(true);
     
 
    api.hideLoading();
  },
 
  downloadPic() {
    api.saveCanvas('avatarPic')
      .then(res => {
        return api.saveImage(res.tempFilePath);
      })
      .then(res => {
        api.showToast('保存成功', 'success');
      });
  },


相关代码片段2:点击保存小程序二维码,但点击后仅返回了临时文件路径,没有保存至手机相册中

onSelect(event) {
    console.log(event.detail.name);
    let _this = this;
    switch(event.detail.name) {
      case '保存小程序二维码':
        wx.cloud.downloadFile({
          fileID: 'cloud://cloud-lzj35.636c-cloud-lzj35-1300316134/0.png', // 文件 ID
          success: res => {
            // 返回临时文件路径
            let tempPath = res.tempFilePath
            console.log(tempPath);
            wx.saveImageToPhotosAlbum({
              filePath: tempPath,
              success(res) {
                // const savedFilePath = res.savedFilePath;
                api.showToast('保存成功', 'success');
                console.log(res);
                _this.onCancel()
              }
            })
          },
          fail: console.error
        })
        break;
      default:
        _this.onCancel()
        break;
    }
  },


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

2 个回答

  • 养一只鹅
    养一只鹅
    2019-10-25

    saveImg: function(){

        wx.downloadFile({

          url:'http://img02.tooopen.com/images/20150928/tooopen_sy_143912755726.jpg',

          success:function(res){

            let path = res.tempFilePath

            wx.saveImageToPhotosAlbum({

              filePath: path,

              success(res) {

                console.log(res)

              },

              fail(res) {

                console.log(res)

              },

              complete(res) {

                console.log(res)

              }

            })

          },fail:function(res){

            console.log(res)

          }

        })

        

      }

    为啥先下载了,手机上也无法保存??

    2019-10-25
    有用
    回复 1
    • 洪兴仔
      洪兴仔
      2021-03-08
      刚找到原因:是downloadFile出现了fail.打印出来看看
      2021-03-08
      回复
  • 卢霄霄
    卢霄霄
    2019-09-26

    问题1: 头像需要下载,页面需要加载

    问题2:你在 wx.saveImageToPhotosAlbum 加个fail方法打印下呢

    2019-09-26
    有用
    回复 3
    • 陈同凡
      陈同凡
      2019-09-27
      问题已找到了,清理了下数据缓存,重新申请接口权限就OK了~感谢
      2019-09-27
      回复
    • 卢霄霄
      卢霄霄
      2019-09-27回复陈同凡
      原来如此
      2019-09-27
      回复
    • new  object()
      new object()
      2020-09-23回复陈同凡
      怎么个清理了下数据缓存,重新申请接口权限???
      2020-09-23
      回复
登录 后发表内容
问题标签