【发布时间】:2014-07-06 22:21:31
【问题描述】:
所以我这几天一直在处理这个问题,并且在我准备好寻求帮助时明白了这一点。
我正在尝试使用 graphicsmagic 包在基于 node.js 的应用程序中生成动画 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 中,但输出全部损坏。
【问题讨论】:
-
你能解决这个问题吗?我已经尝试过 gifencoder(听起来就像你所做的那样,但是在尝试将 addFrame() 与缓冲区一起使用时出现分段错误)和 gif 模块(似乎只适用于旧版本的节点)。跨度>
-
@Gregir 不,通过在
/tmp中转储一堆文件并进行炮击来做到这一点 -
我有使用 JIMP 库执行此操作的代码,但我正在尝试自己使用 GM 执行此操作
标签: javascript node.js image-processing imagemagick graphicsmagick