收藏
回答

wx.canvasToTempFilePath({})在安卓手机为什么无反应?苹果手机可以正常执行

下面的代码在真机中预览,苹果手机可以正常执行,安卓手机点击按钮后无任何反应,这个是什么原因引起的,谢谢!

各位大侠帮忙看下,谢谢!

//生成按钮点击事件
  subCanvas: function () {
    var that = this
    this.data.ctx.draw(true, () => {
      //console.log('绘制完成');
      //setTimeout(() => { }, 2500)
      //setTimeout(function () { }, 500);
      wx.canvasToTempFilePath({
        canvasId: 'handWriting',
        fileType: 'png',
        quality: 1, //图片质量
        success(res) {
          that.setData(
            {
              tempImagePath: res.tempFilePath //获取临时图片路径
            },
          )    
          var tempdata = that.data.tempImagePath
          wx.getImageInfo({
            src: tempdata,
            success: (res) => {
              let canvasContext = wx.createCanvasContext('tempCanvas')
              //获得exif中的orientation信息   
              if (res.orientation == "up") {
                var width = res.width / 2;
                var height = res.height / 2;
                that.setData({
                  imageWidth: height,
                  imageHeight: width,
                })
                canvasContext.translate(height / 2, width / 2)
                //顺时针旋转90度,由纵向修改为横向
                canvasContext.rotate(-90 * Math.PI / 180)
                canvasContext.drawImage(tempdata, - width / 2, - height / 2, width, height);
              }
              canvasContext.draw()
              that.drawImage()
            }
          })
        }
      })       
    });
  },
  
  //将画布转化为图片(图片有纵向修改为横向)
  drawImage: function (path) {
    
    wx.showLoading({ //显示加载框
      title: '',
      mask: false
    })
    var that = this;
    setTimeout(() => {
    // 将生成的canvas图片,转为真实图片
      wx.canvasToTempFilePath({
        x: 0,
        y: 0,
        canvasId: 'tempCanvas',
        success(res) { //转化成功回调函数
          //页面跳转
          var pages = getCurrentPages();
          var currPage = pages[pages.length - 1]; //当前页面
          var prevPage = pages[pages.length - 2]; //上一个页面
          var that = this
          //直接调用上一个页面对象的setData()方法,把数据存到上一个页面中去
          prevPage.setData({ //设置上一个页面中的data
            signImageFile: res.tempFilePath,
          })
          wx.hideLoading() //隐藏加载框
          wx.navigateBack({ //返回上一个页面
            delta: 1,
          })
        },
        fail: function (res) {
        }
      })
    }, 2000)
  },
回答关注问题邀请回答
收藏

4 个回答

  • 冯志肖
    冯志肖
    2020-03-01

    在小程序开发工具中,上面的代码可以正常执行,但是到了安卓真机里面就不可以了!

    2020-03-01
    有用 1
    回复
  • 阿白
    阿白
    2020-07-19

    今天我遇到了这个问题,原因是canvas绘制的图像过大,导致android缓冲区的限制大小。

    解决办法就是:把像素比设置为1。

     // const dpr = wx.getSystemInfoSync().pixelRatio;
        const dpr = 1;
       canvas.width = that.data.canvas.width * dpr;
       canvas.height = that.data.canvas.height * dpr;
    
    2020-07-19
    有用
    回复
  • 在路上233
    在路上233
    2020-03-11

    我也是

    2020-03-11
    有用
    回复 1
  • 疯狂的小辣椒
    疯狂的小辣椒
    2020-03-01

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

    2020-03-01
    有用
    回复 8
    • 冯志肖
      冯志肖
      2020-03-01
      你好,问题解决了,谢谢!
      2020-03-01
      回复
    • 小石头
      小石头
      2020-03-06回复冯志肖
      请问怎么解决的
      2020-03-06
      回复
    • 在路上233
      在路上233
      2020-03-11回复冯志肖
      怎么解决的
      2020-03-11
      回复
    • 诗酒趁年华ᴴ
      诗酒趁年华ᴴ
      2020-07-07回复冯志肖
      说一下解决方法啊兄弟
      2020-07-07
      回复
    • 杨不颓
      杨不颓
      2020-07-08回复冯志肖
      怎么解决的呀,兄弟
      2020-07-08
      回复
    查看更多(3)
登录 后发表内容
问题标签