我目前正在用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在同一篇文章中还有另一个版本。该版本的函数以块的形式读取文件,并检查每个单独的块,但这种方法并不正确,因为头可能最终被拆分为两个块。