如何在NodeJS上使用GraphicsMagick提取GIF的第一帧并将其保存为PNG?

ale*_*son 2 javascript node.js graphicsmagick

以下是我要执行此操作的步骤:

  1. 用户向服务器提供动画gif的链接
  2. 服务器使用"request(url)"来检索文件
  3. 服务器生成gif第一帧的缩略图
  4. 服务器将缩略图上载到Amazon S3

问题存在于第3步中.我无法找到提取gif第一帧的方法.我更喜欢使用GraphicsMagick但是如果你知道其他方式有用,我将非常感激!

NodeJS正在使用中.

Luc*_*edo 6

我不知道为什么这不在文档中,但是其他人在stackoverflow上回答了这个问题.

因此,您可以将其与文件路径字符串或流/缓冲区一起使用,如下所示:

对于文件:

gm('/path/to/animated.gif')
.selectFrame(0)
.write('/path/to/firstframe.png', function(err){
    if (err) print('  :(  ');
})
Run Code Online (Sandbox Code Playgroud)

对于流/缓冲区:

gm(streamOrBuffer)
.selectFrame(0)
.write('/path/to/firstframe.png', function(err){
    if (err) print('  :(  ');
})
Run Code Online (Sandbox Code Playgroud)

在文档中,他们说你需要将路径字符串更改'/path/to/animated.gif[0]'为更适合你想要选择的帧,但我测试了该代码而没有指定框架,并且它工作正常(使用gm@1.21.1和ImageMagick 6.7.7-10 2014-03-06).此外,他们在文档中的内容(不使用selectFrame)不起作用.它最终崩溃并在整个过程中创建了整个gif的几个png帧.

为什么他们没有记录selectFrame,但是超出了我的想法.当他们在引用链接指出的那样,是一个开放的问题,不知道正是.