Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 将原始图像转换为缓冲区_Node.js_Image_File_Raspberry Pi_Buffer - Fatal编程技术网

Node.js 将原始图像转换为缓冲区

Node.js 将原始图像转换为缓冲区,node.js,image,file,raspberry-pi,buffer,Node.js,Image,File,Raspberry Pi,Buffer,在Raspberry Pi中显然没有简单的方式来流式传输图像。虽然有很多黑客可用,但在我的Raspberry Pi Zero中,它在保持一个合适的帧速率方面有一些困难 我怀疑其中一个主要问题是,它们中的大多数为每个映像向SD写入/读取。到目前为止,我可以在不接触SD的情况下从终端读取图像: const out = await exec(`fswebcam -r 640x480 -`); const img = out[0]; console.log(img); 这让我在终端上看到: ����

在Raspberry Pi中显然没有简单的方式来流式传输图像。虽然有很多黑客可用,但在我的Raspberry Pi Zero中,它在保持一个合适的帧速率方面有一些困难

我怀疑其中一个主要问题是,它们中的大多数为每个映像向SD写入/读取。到目前为止,我可以在不接触SD的情况下从终端读取图像:

const out = await exec(`fswebcam -r 640x480 -`);
const img = out[0];
console.log(img);
这让我在终端上看到:

 ����JFIF``��>CREATOR: gd-jpeg v1.0 (using IJG JPEG v80), default quality
��      

 $.' ",#(7),01444'9=82<.342��C          
其中,
file
是缓冲区,
file.toString('base64')
是以下格式的字符串:

/9j/4AAQSkZJRgABAQEAYABgAAD//gA8Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcgSlBFRyB2ODApLCBxdWFsaXR5ID0gMTAwCv ...

这是可行的(但通过SD卡)。所以我的问题是,终端中第一个输出的格式是什么?如何将其转换为缓冲区或类似于后者的字符串。

我最终使用终端直通管道将其转换为base64:

fswebcam -r 640x480 - | base64
所以现在我的整个片段是:

// Take a picture in an async way and return it as a base64 encoded string
// Props: https://scottlinux.com/2012/09/01/encode-or-decode-base64-from-the-command-line/
module.exports = async ({ resolution = '640x480', rotate = 0 } = {}) => {
  const query = `fswebcam -r ${resolution} --rotate ${rotate} - | base64`;
  const out = await exec(query, { maxBuffer: 1024 * 1024 });
  return out[0];
};

我最终只是使用终端直通管道将其转换为base64:

fswebcam -r 640x480 - | base64
所以现在我的整个片段是:

// Take a picture in an async way and return it as a base64 encoded string
// Props: https://scottlinux.com/2012/09/01/encode-or-decode-base64-from-the-command-line/
module.exports = async ({ resolution = '640x480', rotate = 0 } = {}) => {
  const query = `fswebcam -r ${resolution} --rotate ${rotate} - | base64`;
  const out = await exec(query, { maxBuffer: 1024 * 1024 });
  return out[0];
};

看起来像jpeg-JFIF代表jpeg文件交换格式,通常称为jpeg。@barny抱歉,是的,它是jpg。但我的意思是,它是二进制的吗?如何将保存的数据转换为可用的格式,如
缓冲区
?是的,它是二进制的。你能在上面使用toString()吗?是的,但这就是我使用时得到的。toString():
console.log(img.toString())
makes
����JFIF``��>创建者:gd jpeg v1.0(使用IJG jpeg v80),默认质量�� […]
Sorry的意思是字符串('base64')-这将产生ASCII表示的数据,这不是您处理数据进出SD时所做的吗?或者如果不是,我真的不明白你的实际问题是什么。看起来像jpeg-JFIF代表jpeg文件交换格式,通常被称为jpeg。@barny抱歉,是的,它是jpg。但我的意思是,它是二进制的吗?如何将保存的数据转换为可用的格式,如
缓冲区
?是的,它是二进制的。你能在上面使用toString()吗?是的,但这就是我使用时得到的。toString():
console.log(img.toString())
makes
����JFIF``��>创建者:gd jpeg v1.0(使用IJG jpeg v80),默认质量�� […]
Sorry的意思是字符串('base64')-这将产生ASCII表示的数据,这不是您处理数据进出SD时所做的吗?如果不是,我真的不明白你真正的问题是什么。