动画Gif文件是否嵌入了GIFGIF?

时间:2012-01-11 13:14:45

标签: php animated-gif

我目前正在重新编写PHP中的现有工具,其他人开始优化图片,对于gif图片,我将转换为png,然后优化png file。对于animated gifs,我将浏览名为Gifsicle的程序,该程序可以优化动画gif图像。

在一些现有的代码库中,另一个人确定了带有文件扩展名gifgif的动画gif图像,如下面的代码段所示,它们包含引用此gifgif的所有代码。< / p>

我搜索了Google,我无法在任何地方找到gifgif文件的提及,此外我从未听说过一个。

有人可以帮我弄清楚实际的扩展名gifgif是否存在?是否可能嵌入animated gif个文件?

代码......

$types = array("gif", "png", "gifgif", "jpg", "jpeg", "bmp");

if (substr($type, 0, 6) === "gifgif") 
{
    $type = "gifgif";
}

case "gifgif":
    $dest_file .= ".gif";
    $cmd = "/usr/bin/gifsicle -O2 $src_file > $dest_file";
    exec($cmd, $return, $error);

2 个答案:

答案 0 :(得分:2)

这不是标准扩展程序,您显示的代码似乎只关心文件扩展名。

据推测,您正在使用的系统的开发人员提出了该约定,并且该系统是独一无二的。

答案 1 :(得分:1)

gifgif不是有效的扩展名 - 并且无论如何都不是检查文件是否为动画gif文件的有效方法。为了检查文件是否是动画gif,您需要实际解析文件的内容并检查帧头。这个功能可以简单地完成:

<?php
function is_ani($filename) {
    return (bool)preg_match('#(\x00\x21\xF9\x04.{4}\x00\x2C.*){2,}#s', file_get_contents($filename));
}
?>

P.S。这不是我的功能,而是从http://php.net/manual/en/function.imagecreatefromgif.php借来的。同一篇文章中给出了另一个版本。该版本的函数以块的形式读取文件并检查每个单独的块,但是这种方法不正确,因为标头可能最终被分成两个块。