我如何提取GIF的第一帧并使用GraphicsMagick在NodeJS上将其保存为PNG
How can I extract the first frame of a GIF and save it as a PNG using GraphicsMagick on NodeJS?
下面是我要做的步骤:
- 用户给服务器一个链接到一个动画gif
- 服务器使用"request(url)"来检索文件
- 服务器生成gif第一帧的缩略图
- 服务器将缩略图上传到Amazon S3
步骤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
相关文章:
- nodejs-expressjs上传图像并显示它们
- TypeError:在不兼容的接收器nodejs上调用了方法Uint8Array.length
- NodeJS-readline暂停和恢复事件发射器(逐行读取)
- NodeJS日期格式不起作用
- Nested Q.all nodejs
- Nodejs API控制器,用于在API之间切换
- 否'访问控制允许来源'标头存在于IISNOde中请求的资源(AngularJS+NodeJs)上
- 如何在大型nodeJS代码的基础上逐步引入typescript
- 在Nodejs中Express输入DEBUG=app时权限被拒绝/bin
- 无法使用nodeJS在html中设置Image src
- 与域在同一台计算机上运行的NODEJS服务器的CORS错误
- NodeJS API调用中Array中的Push和Pull元素
- 基于api密钥的NodeJS web服务
- 在gump和nodejs中使用Typescript时,未定义对require和exports的引用
- “util.inherits”和在NodeJS中扩展原型之间的区别
- 将一个方法转换为promise:Nodejs
- nodejs中匿名函数的使用
- Node和Nodejs版本不同
- Nodejs服务器在解析之前生成输入表单
- 在Nodejs中为许多用户处理计时器