收藏
回答

onCameraFrame获取的base64格式与普通图片base64格式不同

问题模块 框架类型 问题类型 API/组件名称 终端类型 微信版本 基础库版本
API和组件 小程序 需求 onCameraFrame 微信iOS客户端 6.5.3 2.7.7
onCameraFrame获取的arraybuffer用wx.arrayBufferToBase64转换后得到的base64格式看起来很奇怪,与普通图片转成的base64格式不一样,得到的base64也无法通过工具转换成图片。请问有人解决过这种问题吗,该如何处理?
最后一次编辑于  07-30  (未经腾讯允许,不得转载)
邀请回答
复制链接收藏关注问题回答

15 个回答

  • Eric Huang
    Eric Huang
    置顶回答07-31

    onCameraFrame 获取的是未经过编码的原始 RGBA 格式的图像数据,如果要转换成图片,需要对 arraybuffer 做一次图像编码(例如 PNG / JPEG)。或是借用 canvas 的 putImageData,先画进 canvas 再保存成图片。

    07-31
    赞同
    回复 9
    • 木头
      木头
      08-01


      我现在是用 canvas 的 putImageData,但是我发现导出图片用canvasToTempFilePath拿到res.tempFilePath有时会报上面这个错误,有时候又是正常,我没有用operateCamera也不会去操作它得proto,不明白什么情况

      08-01
      赞同
      回复
    • Eric Huang
      Eric Huang
      08-01回复木头
      你在 onCameraFrame 里拿到的 frame.data 是有效的是吧?如果出现这个错误还可以拿到 frame data 吗?
      08-01
      赞同
      回复
    • Eric Huang
      Eric Huang
      08-01回复Eric Huang
      另外这里用的是什么机型呢?
      08-01
      赞同
      回复
    • 木头
      木头
      08-01
      frame data有没有效不知道,因为不能直接翻译这个数据,但是看数据的长度是正常大小,应该是可以拿到的。小米mix2,给别人用好像也会这样。
      08-01
      赞同
      回复
    • Eric Huang
      Eric Huang
      08-01

      行,我们排查一下,这块可能是内存分配失败了,建议先 catch 一下,然后重试:

      const listener = ctx.onCameraFrame(() => {})
      try {
        listener.start();
      } catch (e) {
        listener.start();
      }


      08-01
      赞同
      回复
    查看更多(4)
  • 止水
    止水
    07-30
    我也遇到了这个问题
    07-30
    赞同
    回复 1
    • kunt
      kunt
      08-07
      我也是,你解决了吗
      08-07
      赞同
      回复
  • 娇华
    娇华
    07-30

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

    07-30
    赞同
    回复 2
    • 木头
      木头
      07-30
      https://developers.weixin.qq.com/s/cZmeSfmD7MaD
      07-30
      赞同
      回复
    • 木头
      木头
      07-30
      小米mix2,7.0.5,miui10.3
      07-30
      赞同
      回复