获取 GIF 图像的第一帧而不下载所有其他帧

Posted

技术标签:

【中文标题】获取 GIF 图像的第一帧而不下载所有其他帧【英文标题】:Getting the first frame of a GIF image without downloading all the other frames 【发布时间】:2012-03-19 14:01:28 【问题描述】:

我想从网络上获取一个GIF图片,但是我发现如果我下载整个GIF图片会造成很大的网络流量。

我可以只吗?

【问题讨论】:

我很想知道对一个完全有效的问题投反对票的原因。 使用此链接中的库:github.com/dragon66/icafe,就像一行调用一样简单:ImageIO.getReader(ImageType.GIF).getFrameAsBufferedImage(InputStream is) 或 ImageIO.getReader(ImageType.GIF ).read(InputStream 是)。返回类型将是 Java BufferedImage。 【参考方案1】:

好吧,我还没有找到现成的解决方案,但你可以这样做(它会导致一些“低级”技巧):

按照wiki about GIFs,可以将动画gif文件拆分成帧,并且可以轻松识别帧结束。因此,您需要将 GIF 标题、屏幕信息、有关动画的信息读入缓冲区、下载第一帧并附加信息(如 GIF 结束)(wiki 文章后面的“3B”)。而且,如果您将此数据复制到单独的缓冲区中,您将能够继续整个文件下载,而无需重新下载第一帧。

您还可以编辑标题信息以将第一帧格式化为静态 gif。

【讨论】:

【参考方案2】:

9 年 6 个月后,正是出手相助的好时机。 这可以通过 ImageMagick 使用以下命令来完成:

magick mogrify -format png *.gif[0]

在包含文件的文件夹的目录中使用控制台。

【讨论】:

以上是关于获取 GIF 图像的第一帧而不下载所有其他帧的主要内容,如果未能解决你的问题,请参考以下文章

PHP ImageMagick 在每一帧动画 Gif 中改变颜色

如何从 Java Swing 的第一帧开始一个 .gif 文件?

第五十二篇 OC获取视频的第一帧图片thumbnailImage

web获取视频图片第一帧

在Android中如何获取视频的第一帧图片并显示在一个ImageView中

如何在视频的第一帧之前放置静止图像?