我想使用“ imagemagick”的子进程转换接收到的图像(带有二进制缓冲区的POST请求),然后将结果发送回(同样,作为二进制缓冲区)。 imagemagick命令需要文件名,例如
"convert input_file output_file"
将传入的图像保存到磁盘,进行转换,然后从磁盘读取输出文件以将其发送回去,这感觉很浪费。很多磁盘IO操作 在RAM中完成所有操作的最佳方法是什么?
更新: 我得到了一个很好的答案,但是如果我可以保留对来自stdout的子进程日志的访问,那就太好了。
答案 0 :(得分:1)
convert
命令可以从stdin
接收输入并输出到stdout
(取决于您的操作系统)。要使用它,请用-
替换文件名,以便:
convert ${your options} -
然后使用节点的child_process生成,以获取输入流并对其进行写入,并从输出流中进行读取。例如:
const spawn = require('child_process').spawn
const child = spawn('convert ${your options} - ')
child.stdout.on('data', (chunk) => { /* append output chunk */ })
child.stdout.on('end', () => { /* Do something with the result */ })
child.stderr.on('data' (chunk) => { console.log('Failed: ', chunk) }
child.stdin.write(buffer)
请参见以下示例:https://imagemagick.org/script/command-line-processing.php。