我希望您能帮助我将图片数据传输到一个函数中,这个函数在浏览器中使用非常成功。
在浏览器中的代码如下:
var myImageData = context.getImageData(0, 0, width, height);
var gray = tracking.Image.grayscale(myImageData.data, width, height);
这很好,并且据我所知,它似乎从一个canvas
中的图像生成了一个ImageData
对象。
ImageData
对象的.data
属性似乎是一个Uint8ClampedArray
,读取的内容为[r1, g1, b1, a1, r2, g2, b2, a2.....]
。看着模式,每四个数字中就有一个是255
,这很合理,因为图像没有透明度。
我正在尝试以类似的方式在Node.js中使其工作,只是我的图像数据来自由https://github.com/lovell/sharp生成的缓冲区:
sharp(body)
.resize(newWidth, newHeight)
.raw()
.toBuffer(function (err, buffer, info) {
var gray = tracking.Image.grayscale(buffer, newWidth, newHeight);
});
问题是,这显然行不通。我不能直接将缓冲区传递给函数。我尝试了很多方法,唯一显示数组的过程是
buffer.toJSON().data
。查看它时,所有数字都 <= 255,但我看不到任何指示有 每四个数字中有一个是255 模式的地方,这表明出了问题。我的问题是:
如何从Node.js图像缓冲区获取带有正确格式的
[r1, g1, b1, a1, r2, g2, b2, a2.....]
的 Uint8ClampedArray
,以便我可以将其传递给我的函数?Sharp 提供其他缓冲区编码方法,如
.png()
或 .jpeg()
,但这两者都没有为我工作,我认为我当前正在使用的 .raw()
函数会给我想要的结果。非常感谢您的帮助!