我需要将从 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 -id 1 -o > foo.png
它就像一个魅力,png 保存为foo.png
.
在输出PNG的最后步骤里面render -id 1 -o
基本上看起来有点像这样。
process.stdout.write(fs.readFileSync(files[0].tempName));
它读取保存的临时文件并输出。
不幸的是,我不能只返回临时文件的名称,然后再次加载 png。
更新我怀疑exec
命令的缓冲区大小导致了这个问题,所以我将 maxBuffer 提高到1024*10240
应该是 10mb 左右。图像不应大于 2-3mb。但这没有帮助。