我已经花了几天时间解决这个问题,现在我需要寻求帮助。
我正在尝试在基于node.js的应用程序中使用graphicsmagic包生成一个动画gif。
我已经生成了几张幻灯片,看起来有点像这样。
var slides = [];
for (var i=0; i < 10; i++) {
var slide = gm(200, 200, '#000000')
.fill('#ffffff')
.drawText("Slide #"+ i);
slides.push(slide);
}
我可以将它们转换成流或缓冲区,也可以将它们保存为硬盘上的单独文件,这种方式有点可行。
但我的问题是如何在内存中完全创建一个动态gif,而不需要将单个文件保存到硬盘上?
我看到gm有像#delay()和#page()这样的方法,所以从技术上讲,我可以制作一个命令。
convert -delay 200 -page slide1.gif -page slide2.gif output.gif
我不知道如何做。我认为它应该看起来像这样。
var end_image = gm(200, 200, '#000000');
end_image.delay(500);
for (var i=0; i < slides.length; i++) {
slides[i].toBuffer(function(err, buffer) {
end_image.page(200, 200, ????);
});
}
end_image.write("output.gif");
基本上我不知道如何将缓冲区转换为
gm
的参数。有人以前做过吗?也许还有另一种方法?
PS:我也尝试使用
gifencoder
包,并成功地将gm
缓冲区作为帧馈送到gifencoder的API中,但输出全部损坏了。
/tmp
并进行 shell 外壳处理完成的。 - Nikolay