如何检测图像是PNG还是APNG格式?

时间:2011-01-16 13:46:36

标签: php python ruby perl apng

  

可能重复:
  Can I programatically determine if a PNG is animated?

APNG向后兼容PNG。我在十六进制编辑器中打开了一个apng和png文件,前几个字节看起来完全相同。因此,如果用户上传这些格式中的任何一种,我如何检测格式究竟是什么?我在一些阻止apng的网站上看到过这种情况。

我猜想ImageMagick库让这很容易,但是如果我不使用图像处理库(用于学习目的)进行检测怎么办?我可以查找特定的字节来告诉我文件是否是apng?

欢迎任何语言的解决方案。

4 个答案:

答案 0 :(得分:1)

来自http://en.wikipedia.org/wiki/Apng

  

在PNG和MNG格式的用户和维护者中,APNG不是   很受欢迎。特别是,PNG被认为是单一图像   格式[2]。 APNG隐藏了PNG辅助组块中的后续帧   以这种方式,APNG不知道的应用程序将忽略它们,但是,   否则,软件的格式没有变化   区分动画和非动画图像。 [斜体矿]

     

[2] "PNG (Portable Network Graphics) Specification, Version 1.1#8.4. Multiple-image extension"

答案 1 :(得分:0)

APNG和PNG文件的“前几个字节”控制可以轻松绕过。所以这种方法并不安全。用户可以更改文件的十六进制代码并传递此控件。

答案 2 :(得分:0)

查看Can I programatically determine if a PNG is animated?的解决方案:您可以搜索字符串“acTL”。

答案 3 :(得分:0)

您可以使用已安装在大多数Unix平台上的libmagic。