我在Raspberry Pi上运行fswebcam。使用命令行,这将保存JPG图像。
我现在想在Node.js应用程序中接收这些图像,并通过dataURI发送它们以在浏览器中使用。
在Node.js上,我这样做:
var exec = require('child_process').exec;
exec("fswebcam -d /dev/video0 -r 160x120 --no-banner --save '-'", function(err, stdout, stderr) {
var imageBase64 = new Buffer(stdout).toString('base64');
然后我将imageBase64
发送到浏览器。
在浏览器中,将接收的数据设置为数据URI失败:
image.src = "data:image/jpg;base64," + imageBase64;
使用由fswebcam(通过在线生成器)创建的存储JPG创建的数据URI执行上述操作可以正常工作。
关于格式和编码,我在这里没有看到什么?
答案 0 :(得分:1)
内容类型应该可能为image/jpeg
而不是image/jpg
。
此外,new Buffer(stdout)
是多余的,因为stdout
已经是缓冲区,因此您只需执行stdout.toString('base64')
。
最后,如果数据本身不好,您可以使用this webpage仔细检查base64编码的输出,或者将stdout
写入磁盘并使用file
命令它确保它完好无损。
答案 1 :(得分:0)
有点晚了,但因为我在从 Node 玩 fswebcam
时遇到了同样的问题,正确的方法是使用 spawn 并听“生成的孩子的标准输出流上的数据”事件。或者,如果您使用 exec 然后将编码传递为“缓冲区”或 null,因为那么回调的 stdout 参数将再次成为 < em>Buffer 实例,因为否则默认情况下它是 exec 文档中所述的 utf-8 编码字符串
child_process.exec("fswebcam -", { encoding: "buffer" }, (error, stdout, stderr) => {
// stdout is Buffer now;
});