Node.JS – 将缓冲图像数据caching到Uint8ClampedArray格式

我正在尝试将图像数据传输到一个我已经在浏览器中成功使用的函数。

浏览器中的代码如下

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.....]Uint8ClampedArray查看模式,每四个数字是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模式,这表明有什么错误。


我的问题是:

我怎么能得到一个Uint8ClampedArray的正确[r1, g1, b1, a1, r2, g2, b2, a2.....]从节点中的图像缓冲区,然后我可以传递给我的function?


夏普提供了其他缓冲区编码方法,如.png().jpeg()但这些都没有为我工作,我会假设我正在使用.raw()函数将给我我想要的。 任何帮助深表感谢!