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);
});