有没有一种方法可以从base64编码的图像数据中同步获取图像的宽度和高度?可能是标题信息。

我必须说得很清楚。我对异步方法不感兴趣。如果您想知道异步无效的原因,请继续。甚至不发表评论。

这是我的示例代码来编码我的数据。编码是同步的。我正在使用此call

var base64ImageData:String = DisplayObjectUtils.getBase64ImageDataString(displayObject, DisplayObjectUtils.PNG, null, true);


这是我的代码来解码我的数据。我在AS3中发现的唯一解码方法是异步的。我正在使用此call

var bitmapData:BitmapData = DisplayObjectUtils.getBitmapDataFromBase64(bitmapDataString);


让我重复一遍,我正在寻找一个同步动作。它不能是异步的。

更多信息:
我正在使用ActionScript3,它是JavaScript的兄弟。如果它在JavaScript中有效,则很可能在AS3中起作用。但是我无法使用dom。请勿将图像添加到dom和检查值。

有用的技巧:
如果有可能将宽度和高度添加到base64流中,然后再获取它,它将同样起作用。

最佳答案

这仅适用于png的
首先要做的是将base64转换为缓冲区(Uint8array),然后将字节16-20(宽度)和20-24(高度)读取为int32值



function getPngDimensions(base64) {
  let header = base64.slice(0, 50)
  let uint8 = Uint8Array.from(atob(header), c => c.charCodeAt(0))
  let dataView = new DataView(uint8.buffer, 0, 28)

  return {
    width: dataView.getInt32(16),
    height: dataView.getInt32(20)
  }
}

// Just to get some random base64 images
var random = (bottom, top) => Math.floor( Math.random() * ( 1 + top - bottom ) ) + bottom
var canvas = document.createElement('canvas')
canvas.width = random(10, 100)
canvas.height = random(10, 100)
console.log(`canvas width: ${canvas.width}, height: ${canvas.height}`)
var base64 = canvas.toDataURL().split(',')[1]
console.log(base64)

var dimensions = getPngDimensions(base64)
console.log(dimensions)

07-24 09:50
查看更多