【问题标题】:fswebcam: getting a dataURI via Node.jsfswebcam:通过 Node.js 获取 dataURI
【发布时间】:2015-05-11 14:47:34
【问题描述】:

我在 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(通过在线生成器)执行上述操作可以正常工作。

关于格式和编码,我在这里看不到什么?

【问题讨论】:

    标签: javascript node.js encoding raspberry-pi data-uri


    【解决方案1】:

    Content-Type 应该可能image/jpeg 而不是image/jpg

    另外,new Buffer(stdout) 是多余的,因为stdout 已经是一个缓冲区,所以你可以直接使用stdout.toString('base64')

    最后,如果数据本身有问题,您可以使用this webpage 或通过将stdout 写入磁盘并在其上使用file 命令来仔细检查您的base64 编码输出以确保其完好无损。

    【讨论】:

    • 感谢 cmets。 'image/jpg' 很好 - 尝试使用其他地方编码的数据 URI,这很有效。将标准输出按原样写入磁盘不会给我一个有效的 JPG 文件 - 这是 fswebcam 在我将其写入文件而不是标准输出时产生的。最后通过'uuencode' - 在检查推荐的网页时,这给了我正确的输出。所以感谢一些有用的提示!
    【解决方案2】:

    有点晚了,但由于我在玩 Node 的 fswebcam 时遇到了同样的问题,正确的方法是使用 spawn 并收听“数据”生成的孩子的标准输出流上的事件。或者,如果您使用 exec 则将编码传递为“缓冲区”或 null,因为回调的 stdout 参数将再次为 Buffer 实例,否则默认情况下它是 exec 文档中所述的 utf-8 编码字符串

    child_process.exec("fswebcam -", { encoding: "buffer" }, (error, stdout, stderr) => {
            // stdout is Buffer now;
          });
    

    【讨论】:

      猜你喜欢
      • 2021-06-02
      • 2014-04-29
      • 1970-01-01
      • 1970-01-01
      • 2016-06-19
      • 2015-12-31
      • 1970-01-01
      • 1970-01-01
      • 2013-08-21
      相关资源
      最近更新 更多