aba*_*haw 10 javascript image image-processing node.js
我正在尝试将图像数据传输到我在浏览器中成功使用的函数中.
浏览器中的代码如下:
var myImageData = context.getImageData(0, 0, width, height);
var gray = tracking.Image.grayscale(myImageData.data, width, height);
Run Code Online (Sandbox Code Playgroud)
这工作得很好,从我的理解似乎是ImageData从图像生成一个对象canvas.
所述.data的的属性ImageData对象似乎是一个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);
});
Run Code Online (Sandbox Code Playgroud)
问题是,这显然不起作用.
我无法将缓冲区直接传递给函数.我已经尝试了很多东西,实际上向我展示了一个数组的唯一过程是buffer.toJSON().data.看那个,数字都<= 255,但是我看不到每个第四个数字都是255模式,这表明出现了问题.
我的问题是:
如何从Node.js中的图像缓冲区获取Uint8ClampedArray正确的[r1, g1, b1, a1, r2, g2, b2, a2.....]格式,然后我可以传递给我的函数?
Sharp提供了其他缓冲区编码方法.png(),.jpeg()但是这些方法都没有对我.raw()有用,我认为我目前使用的功能会给我我想要的东西.
任何帮助深表感谢!
输入缺少 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);
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
731 次 |
| 最近记录: |