收藏
回答

iOS真机下canvas.toDataURL(),为什么获取不到图片数据?

webgl在iOS真机下使用canvas.toDataURL()获取的数据是字符串 “data;”,没有图片数据,模拟机和安卓手机都可以获取到图片数据,请问为什么,怎么解决。

<canvas type="webglid="webglstyle="width:200rpx; height: 200rpx; position:absolute;bindtouchstart="touchStartbindtouchmove="touchMovebindtouchend="touchEnd"></canvas>

this.renderer.getContext().canvas.toDataURL("image/png",0.5);

手机型号版本:

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

3 个回答

  • 社区技术运营专员-Riven
    社区技术运营专员-Riven
    01-28

    你好,反馈已收到,我们核实下,有进展会同步。

    01-28
    有用
    回复
  • Meteor
    Meteor
    09-02

    因为图片的宽度问题。

    //最大高度
    const maxHeight = 5000
    //最大宽度
    const maxWidth = 5000
    const originHeight = img.height
    const originWidth = img.width
    let w = img.width
    let h = img.height
    console.log('原始分辨率', w, h)
    if (originWidth > maxWidth && originHeight > maxHeight) {
      // 更宽更高,
      if (originHeight / originWidth > maxHeight / maxWidth) {
        // 更加严重的高窄型,确定最大高,压缩宽度
        h = maxHeight
        w = maxHeight * (originWidth / originHeight)
      } else {
        //更加严重的矮宽型, 确定最大宽,压缩高度
        w = maxWidth
        h = maxWidth * (originHeight / originWidth)
      }
    } else if (originWidth > maxWidth && originHeight <= maxHeight) {
      // 更宽,但比较矮,以maxWidth作为基准
      w = maxWidth
      h = maxWidth * (originHeight / originWidth)
    } else if (originWidth <= maxWidth && originHeight > maxHeight) {
      // 比较窄,但很高,取maxHight为基准
      h = maxHeight
      w = maxHeight * (originWidth / originHeight)
    } else {
      // 符合宽高限制,不做压缩
    }
    console.log('压缩后分辨率', w, h)
    // 生成canvas
    let canvas = document.createElement('canvas')
    let context = canvas.getContext('2d')
    canvas.height = h
    canvas.width = w
    
    


    把宽高按比例压缩后在进行质量的压缩就不会返回 'data:'

    09-02
    有用
    回复
  • 黄正梦
    黄正梦
    01-28

    遇到了一样的问题,ios出现问题,代码片段如下

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














    01-28
    有用
    回复 1
    • Peng
      Peng
      03-03
      解决了么?
      03-03
      回复
登录 后发表内容
问题标签