如何获取以 Unit8Array 表示的图像的大小?

3 javascript buffer byte image

我有一个用户头像图片的字节数组。它表示为键入的Unit8Array()

const imageBytes = new Unit8Array(...);
Run Code Online (Sandbox Code Playgroud)

现在我需要检查图像大小以设置一些限制以防止用户放置大量图像,但我无法想出如何计算图像大小的想法。

我该如何编写这个函数?我需要获取以 MB 为单位的图像大小

const getImageSizeInMB = unit8Array => { ... };
Run Code Online (Sandbox Code Playgroud)

T.J*_*der 5

您已经说过数组包含图像数据,因此您已经知道图像数据的大小:它是数组的大小。因为它是 sa Uint8Array,所以它length会告诉您它包含多少个 8 位字节。要获得以兆字节为单位的大小,请将该数字除以 1024\xc2\xb2 (1,048,576) 或 1000\xc2\xb2 (1,000,000),具体取决于您所指的是许多人经常使用的兆字节(1024\xc2\xb2) 还是在技术上更准确的每 SI 术语(其中“mega”具体表示一百万 [1000\xc2\xb2])。(如果使用“兆字节”表示“一百万”,则 1024\xc2\xb2 的术语为“兆字节”。)

\n
const sizeInMB = uint8Array.length / 1_048_576;\n// or\nconst sizeInMB = uint8Array.length / 1_000_000;\n
Run Code Online (Sandbox Code Playgroud)\n

如果数据位于Uint16ArrayUint32Array或其他包含大于 8 位字节的元素的数组类型中,则可以使用以下byteLength属性:

\n
const sizeInMB = theArray.byteLength / 1_048_576;\n// or\nconst sizeInMB = theArray.byteLength / 1_000_000;\n
Run Code Online (Sandbox Code Playgroud)\n

(为了鲁棒性,您也没有理由不能对您执行此操作Uint8Array;在Uint8Array和 上Int8ArraylengthbyteLength返回相同的值。)

\n