Javascript 在Node.js中将缓冲区图像数据导入Uint8ClampedArray格式

Javascript 在Node.js中将缓冲区图像数据导入Uint8ClampedArray格式,javascript,node.js,image,image-processing,Javascript,Node.js,Image,Image Processing,我正在尝试将图像数据导入我在浏览器中成功使用的函数 浏览器中的代码如下所示: var myImageData = context.getImageData(0, 0, width, height); var gray = tracking.Image.grayscale(myImageData.data, width, height); 这很好,据我所知,似乎是从画布中的图像生成ImageData对象 ImageData对象的.data属性似乎是一个uint8clampedaray读取[r1、

我正在尝试将图像数据导入我在浏览器中成功使用的函数

浏览器中的代码如下所示:

var myImageData = context.getImageData(0, 0, width, height);
var gray = tracking.Image.grayscale(myImageData.data, width, height);
这很好,据我所知,似乎是从
画布中的图像生成
ImageData
对象

ImageData
对象的
.data
属性似乎是一个
uint8clampedaray
读取
[r1、g1、b1、a1、r2、g2、b2、a2….]
Uint8ClampedArray
,查看模式,每四分之一的数字是
255
,这很有意义,因为所有图像都是透明的

我正试图以类似的方式在Node.js中实现这一点,只是我从以下生成的缓冲区获取图像数据:

问题是,这显然不起作用


我无法将缓冲区直接传递给函数。我已经尝试了很多方法,唯一一个实际显示数组的过程是
buffer.toJSON().data
。从这个角度看,数字都是输入缺少alpha通道。我认为最简单的事情就是加入这样一个新频道:

sharp(body)
  .resize(newWidth, newHeight)
  .joinChannel(Buffer.alloc(newWidth * newHeight, 255), {
    raw: {
      width: newWidth,
      height: newHeight,
      channels: 1
    }
  })
  .raw()
  .toBuffer(function (err, buffer, info) {
    var gray = tracking.Image.grayscale(buffer, newWidth, newHeight);
  });
sharp(body)
  .resize(newWidth, newHeight)
  .joinChannel(Buffer.alloc(newWidth * newHeight, 255), {
    raw: {
      width: newWidth,
      height: newHeight,
      channels: 1
    }
  })
  .raw()
  .toBuffer(function (err, buffer, info) {
    var gray = tracking.Image.grayscale(buffer, newWidth, newHeight);
  });