收藏
回答

小程序canvas绘制base64的二维码图片,真机上不显示

框架类型 问题类型 终端类型 微信版本 基础库版本
小程序 Bug 客户端 6.7.3 1.9.0

后端接口返回二维码的base64格式图片,canvas绘制图片:ctx.drawImage(qrcodePath, xx, xx, xx, xx),开发者工具显示正常,但是真机上无法显示canvas绘制的二维码图片。手机是iphone 6sp


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

6 个回答

  • 卢霄霄
    卢霄霄
    2018-12-05

    writeFile 了解一下

    2018-12-05
    有用 2
    回复 22
    • 我是好好
      我是好好
      2018-12-06

      试了,write之后怎么去读,我用wx.downloadfile和getimageinfo去读取writefile的图片,提示invalid。求指导

      2018-12-06
      回复
    • 卢霄霄
      卢霄霄
      2018-12-06回复我是好好

      write的时候,encoding要选 base64,然后就可以drawImage啦

      2018-12-06
      回复
    • 我是好好
      我是好好
      2018-12-06回复卢霄霄
                  this.QRCodeSrc = 'data:image/png;base64,'+ (res[2] && res[2].body || '') // 生成的base64二维码
                  fs.writeFile({
                      filePath: `${wx.env.USER_DATA_PATH}/resource/demo.png`,
                      data: this.QRCodeSrc,
                      encoding: 'base64',
                      success(res) {
                          console.log('writeFile:', res)
                          wx.getImageInfo({
                              src: `${wx.env.USER_DATA_PATH}/resource/demo.png`,
                              success(res) {
                                  console.log('getImageInfo:', res)
                                  // this.ctx.drawImage('http://usr/resource/demo.png', 12, 384, 80, 80);
       
                              },
                              fail(err) {
                                  console.error(err)
                                  // this.ctx.drawImage('http://usr/resource/demo.png', 12, 384, 80, 80);
                              }
                          })
                      }, fail(err) {
                          console.error(err)
                      }


      2018-12-06
      回复
    • 我是好好
      我是好好
      2018-12-06回复卢霄霄

      wx.getImageInfo时报错: {errMsg: "getImageInfo:fail invalid"},你看我这代码哪里有问题吗

      2018-12-06
      回复
    • 我是好好
      我是好好
      2018-12-06回复我是好好

      貌似我传的data是base64数据,但是我转二进制,也是报的相同的错误

      2018-12-06
      1
      回复
    查看更多(17)
  • CC~
    CC~
    2021-06-08
    setBase64Save(base64File) {
     const fsm = wx.getFileSystemManager();
     let extName = base64File.match(/data\:\S+\/(\S+);/)
     if (extName) {
      extName = extName[1]
     }
     let fileName = Date.now() + '.' + extName
     return new Promise((resolve, reject) => {
      let filePath = wx.env.USER_DATA_PATH + '/' + fileName
      fsm.writeFile({
       filePath,
       data: base64File.replace(/^data:\S+\/\S+;base64,/''), 
       encoding'base64',
       success:(res)=>{
        console.log('filePath',filePath); 
        resolve(filePath);
       },
       fail() {
        reject('写入失败');
       },
      });
     });
     }
    
    2021-06-08
    有用 1
    回复 1
    • CC~
      CC~
      2021-06-08
      也是同样的问题 这样处理了一下工具手机都可以用了 可以参考一下
      2021-06-08
      回复
  • 是小白啊
    是小白啊
    2018-12-05

    canvas不支持base64格式图片

    2018-12-05
    有用 1
    回复 2
    • 我是好好
      我是好好
      2018-12-06

      canvas支持二进制流的图片吗

      2018-12-06
      回复
    • 贝好
      贝好
      2020-04-25
      哈哈,我他娘的也纳闷了6个小时!
      2020-04-25
      回复
  • 我是好好
    我是好好
    2018-12-05

    https的图片可以先wx.downloadFile或者wx.getImageInfo下载下来,再去绘制图片,真机上正常显示,但是对于base64图片调用上面俩API会报错,图片路径不对。求问base64的图片,用canvas画时,真机上如何正确的显示



    2018-12-05
    有用 1
    回复
  • 众航科技
    众航科技
    2020-09-11

    有解决这个问题的么?canvas只能支持buffer流图片吗?

    2020-09-11
    有用
    回复
  • Nf
    Nf
    2018-12-10

    问题如果我用canvas画图时速度非常快,假设1秒20张,先保存到本地再读取的方法就会非常慢,真机能直接用canvas读二进制图片显示吗?

    2018-12-10
    有用
    回复
登录 后发表内容