以下是我想要执行此操作的步骤:
- 用户给服务器一个指向动画 gif 的链接
- 服务器使用“request(url)”来检索文件
- 服务器生成gif第一帧的缩略图
- 服务器将缩略图上传到 Amazon S3
问题存在于第 3 步。我想不出提取 gif 第一帧的方法。我更喜欢使用 GraphicsMagick,但如果您知道还有其他方法可以使用,我将不胜感激!
正在使用 NodeJS。
以下是我想要执行此操作的步骤:
问题存在于第 3 步。我想不出提取 gif 第一帧的方法。我更喜欢使用 GraphicsMagick,但如果您知道还有其他方法可以使用,我将不胜感激!
正在使用 NodeJS。
我不知道为什么这不在文档中,但其他人在 stackoverflow 上回答了这个问题。
因此,您可以将其与文件路径字符串或流/缓冲区一起使用,如下所示:
对于文件:
gm('/path/to/animated.gif')
.selectFrame(0)
.write('/path/to/firstframe.png', function(err){
if (err) print(' :( ');
})
对于流/缓冲区:
gm(streamOrBuffer)
.selectFrame(0)
.write('/path/to/firstframe.png', function(err){
if (err) print(' :( ');
})
在文档中,他们说您需要将路径字符串更改'/path/to/animated.gif[0]'
为更具体地使用您要选择的框架,但我在没有指定框架的情况下测试了该代码,并且它工作正常(使用 gm@1.21.1 和ImageMagick 6.7.7-10 2014-03-06)。此外,他们在文档中的内容(不使用 selectFrame)也不起作用。它最终崩溃并在此过程中创建了整个 gif 的几个 png 帧。
为什么他们还没有记录selectFrame超出了我的范围。正如他们在引用的链接中指出的那样,有一个未解决的问题正是想知道.
由于我无法让它在服务器端工作,我最终只是将 .gif 绘制到一个<canvas>
元素以“模拟”提取 .gif 的第一帧。这给了我想要的暂停 gif。