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


Do animated Gif files have GIFGIF embedded in them?

我目前正在用PHP重新编写另一个人启动的用于优化图像的现有工具,对于gif图像,我将转换为png,然后优化png file。对于animated gifs,我将运行名为Gifsicle的程序,该程序可以优化动画gif图像。

在一些现有的代码库中,另一个人识别了文件扩展名为gifgif的动画gif图像,正如你在下面的片段中看到的那样,它们包含了引用该gifgif的所有代码。

我在谷歌上搜索过,在任何地方都找不到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);

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

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

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));
}
?>

附言:这不是我的职责,而是从http://php.net/manual/en/function.imagecreatefromgif.php在同一篇文章中还有另一个版本。该版本的函数以块的形式读取文件,并检查每个单独的块,但这种方法并不正确,因为头可能最终被拆分为两个块。