【发布时间】:2018-11-15 21:09:26
【问题描述】:
我有一个用例,我想将图像 uint8 数据传递给网络工作者。 现在我正在使用画布来获取 uint8 图像数据。有没有办法在没有画布的情况下做到这一点。
这是我正在使用的一段代码。
let img = new Image(),
canvas = document.createElement('canvas'),
context = canvas.getContext('2d');
img.crossOrigin = 'anonymous';
img.src = someImageUrl;
img.onload = () => {
canvas.height = this.naturalHeight;
canvas.width = this.naturalWidth;
context.drawImage(img, 0, 0);
const imgData = context.getImageData(0, 0, canvas.width, canvas.height);
// post this imgData to the worker
worker.postMessage(imageData);
};
【问题讨论】:
-
画布不提供 any 方法来获取图像文件的 Uint8 表示。它得到的是一个 Uint8ClampedArray,其中包含与图像中的像素相对应的 RGBA 通道,但它们并不相同,它们已被计算出来,并且由于 sRGB 引起的预乘的有损方面,没有获得准确值的方法。 (这在canvas fingerprinting 中被利用)虽然有一些方法可以获得文件的 Uint8 表示(标题仍然压缩等)。那么你想要其中的哪一个?
-
@Kaiido 感谢您澄清这一点,我想获得 UInt8ClampedArray 进行处理。
标签: javascript image html5-canvas