当尝试从ImageMagick子进程读取Node.js中的数据时,它会被破坏.
一个简单的测试用例如下:
var fs = require('fs');
var exec = require('child_process').exec;
var cmd = 'convert ./test.jpg -';
exec(cmd, {encoding: 'binary', maxBuffer: 5000*1024}, function(error, stdout) {
fs.writeFileSync('test2.jpg', stdout);
});
Run Code Online (Sandbox Code Playgroud)
我希望这相当于convert ./test.jpg - > test2.jpg正确编写二进制文件的命令行.
最初,maxBuffer选项太小而导致截断文件出现问题.增加之后,文件现在看起来比预期略大并且仍然损坏.来自stdout的数据需要通过HTTP发送.
从ImageMagick标准输出读取这些数据的正确方法是什么?
我正在尝试使用PhantomJS将html页面呈现为pdf.我不想把文件写到磁盘上,我在内存中有html,我想在内存中使用pdf.
在这个问题上使用Pooria Azimi的优秀答案,我能够从命名管道中获取pdf.当在另一端尝试相同(用命名管道替换输入文件)时,我最终得到一个空白的pdf.
这就是我现在正在做的事情(简化):
mkfifo in_pipe.html out_pipe.pdf
./phantomjs rasterize.js in_pipe.html out_pipe.pdf
Run Code Online (Sandbox Code Playgroud)
然后在另一个终端:
echo '<center>hey!</center>' > in_pipe.html
cat out_pipe.pdf > out.pdf
Run Code Online (Sandbox Code Playgroud)
文件out.pdf已创建,但为空.我错过了什么吗?