如何以编程方式检查GIF图像是否已设置动画?

Joe*_*gen 13 php python image

这是我询问的有关我正在进行的同一项目的另一个问题的链接.我认为这一点背景会有所帮助.

对于那些懒得打开这个问题的新标签的人,我会总结一下我在这里要做的事情:我从4scrape下载了大约250,000张图片,我想通过GIF找到哪些是动画与否.我需要以编程方式执行此操作,因为我真的不觉得我的灵魂(或我与我的女朋友的关系)可以使用从4chan查看几千个GIF来查看它们是否有动画.如果您知道4chan的性质,那么您就知道图像的本质(即"山雀或GTFO").

我知道PHP和Python,但愿意探索其他解决方案.在Windows上运行的独立软件也可以使用.

非常感谢!

bob*_*nce 18

使用Python和PIL:

from PIL import Image
gif = Image.open('path.gif')
try:
    gif.seek(1)
except EOFError:
    isanimated = False
else:
    isanimated = True
Run Code Online (Sandbox Code Playgroud)

  • 这些天(Pillow == 4.3.0)你可以简单地从PIL导入图像做到; Image.open( 'animated.gif').is_animated` (2认同)

Den*_*aia 13

如果您使用的是Linux(或任何带有ImageMagick的系统),您可以使用单行shell脚本和identify程序:

identify *.gif | fgrep '.gif[1] '
Run Code Online (Sandbox Code Playgroud)

我知道你说你更喜欢PHP和Python,但你也说你愿意探索其他解决方案.:)

  • Linux/Ubuntu 上的替代命令:`identify -format %n giffile.gif` – `%n` 给出场景的数量,如果超过一个则其动画。 (2认同)

qwr*_*qwr 9

枕头 2.9.0 添加is_animated

这将添加属性is_animated, 以检查图像是否具有多个图层或框架。

用法示例:

from PIL import Image
print(Image.open("test.gif").is_animated)
Run Code Online (Sandbox Code Playgroud)


Eri*_*c M 7

我从来没有见过会告诉你的程序.但是GIF是块结构化格式,您可以检查文件中是否存在指示动画GIF的块.

从下面提到的维基百科文章:在偏移量0x30D处,GIF文件中的应用程序扩展(即:3字节幻数21 FF 0B)块,后跟幻数4E 45 54 53 43 41 50 45 32 9at偏移量0x310表示剩下的该文件包含多个图像,它们应该是动画的.

维基百科的文章确实更好地解释了它,下面提到的格式文档扩展了维基文章.

因此,您可以使用Python编写的程序解析GIF(我多年前使用C解析了GIF,主要是移动文件指针并读取字节的练习).确定AE是否存在正确的3字节ID,然后是9字节幻数.

http://en.wikipedia.org/wiki/Graphics_Interchange_Format#Animated_.gif

另见http://www.martinreddy.net/gfx/2d/GIF87a.txt

另见http://www.martinreddy.net/gfx/2d/GIF89a.txt

对不起,我能为你做到最好.