Javascript 如何将图像从cli标准加载到缓冲区并插入画布
我需要将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
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解码过程中损坏。