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は.pngとして保存されfoo.png
ます。
PNG を出力する最終ステップの内部はrender -id 1 -o
、基本的に次のようになります。
process.stdout.write(fs.readFileSync(files[0].tempName));
保存した一時ファイルを読み込んで出力します。
残念ながら、一時ファイルの名前を返してからpngを再度ロードすることはできません。
更新コマンドのバッファサイズが問題の原因ではないかと疑ったexec
ため、maxBuffer を 10mb 程度に1024*10240
増やしました。画像は 2 ~ 3 MB を超えないようにしてください。しかし、それは役に立ちませんでした。