Javascript 如何将图像从cli标准加载到缓冲区并插入画布

Javascript 如何将图像从cli标准加载到缓冲区并插入画布,javascript,node.js,buffer,node-canvas,Javascript,Node.js,Buffer,Node Canvas,我需要将cli脚本生成的图像加载到画布中 let { exec } = require('child_process'); let { Image } = require('canvas'); let image = new Image(); image.onload = function() { console.log('Success'); } image.onerror = function(err) { console.error(err); } exec("re

我需要将cli脚本生成的图像加载到画布中

let { exec } = require('child_process');
let { Image } = require('canvas');

let image = new Image();

image.onload = function() {
    console.log('Success');
}

image.onerror = function(err) {
    console.error(err);
}

exec("render -id 1 -o", {maxBuffer:1024*10240}, (err, stdout, stderr) => {

    if (err) {
        console.error(err);
        return;
    }


    // Not working
    //image.src = new Buffer(new Uint8Array(stdout));

    // Not working either
    //image.src = Buffer.from(stdout);
});
如果我在我的控制台中运行
$render-id1-o>foo.png
它就像一个符咒一样工作,png将保存为
foo.png

render-id1-o
中,输出PNG的最后步骤基本上有点像这样

process.stdout.write(fs.readFileSync(files[0].tempName));
它读取保存的临时文件并将其输出

不幸的是,我不能只返回临时文件的名称,然后再次加载png


Update我怀疑是
exec
命令的缓冲区大小导致了这个问题,所以我将maxBuffer增加到
1024*10240
,应该是10mb左右。图像不应大于2-3mb。但是它没有帮助。

您是否记录了
stdout
stderr
以检查问题?是的,没有错误。我也试着在我的终端上运行完全相同的命令,它输出的PNG很好。你说的“不工作”是什么意思?
onload
onerror
都没有运行吗?尝试将
编码:“buffer”
添加到
exec
配置中,否则它可能会在utf8解码过程中损坏。