有没有办法用PHP或Java检查GIF图像是否有动画


Is there a way to check if a GIF image has animation with PHP or Java?

您知道GIF文件支持动画,但GIF图像不一定要有动画。

有没有一种方法可以使用php或java检查GIF图像是否有动画?

谢谢。

这里有一个小PHP脚本,它应该能够确定图像是否是动画gif。我已经测试过了,它对我有效。

<?php
$img="your_image";
$file = file_get_contents($img);
$animated=preg_match('#('x00'x21'xF9'x04.{4}'x00'x2C.*){2,}#s', $file);
if ($animated==1){
    echo "This image is an animated gif";
} else {
    echo "This image is not an animated gif";
}
?>

只需将$img变量编辑为您想要测试的任何图像(例如image.gif、image.jpg)。

在imagecreatefromgif()函数的php手册页面中有一段简短的代码片段,应该是您所需要的:

<?php
    function is_ani($filename)
    {
            $filecontents=file_get_contents($filename);
            $str_loc=0;
            $count=0;
            while ($count < 2) # There is no point in continuing after we find a 2nd frame
            {
                    $where1=strpos($filecontents,"'x00'x21'xF9'x04",$str_loc);
                    if ($where1 === FALSE)
                    {
                            break;
                    }
                    else
                    {
                            $str_loc=$where1+1;
                            $where2=strpos($filecontents,"'x00'x2C",$str_loc);
                            if ($where2 === FALSE)
                            {
                                    break;
                            }
                            else
                            {
                                    if ($where1+8 == $where2)
                                    {
                                            $count++;
                                    }
                                    $str_loc=$where2+1;
                            }
                    }
            }
            if ($count > 1)
            {
                    return(true);
            }
            else
            {
                    return(false);
            }
    }
    exec("ls *gif" ,$allfiles);
    foreach ($allfiles as $thisfile)
    {
            if (is_ani($thisfile))
            {
                    echo "$thisfile is animated<BR>'n";
            }
            else
            {
                    echo "$thisfile is NOT animated<BR>'n";
            }
    }
    ?>

如果需要,可以很容易地修改它来计算帧数。

请参阅此处

试试这样的东西:

public function getNumFramesFromGif(string $url): int{
    $image = file_get_contents($url);
    $imagick = new 'Imagick();
    $imagick->readImageBlob($image);
    $numFrames = $imagick->identifyFormat("%n"); //https://www.php.net/manual/en/imagick.identifyformat.php https://davidwalsh.name/detect-gif-animated
    return $numFrames;
}

如果返回1,则不设置动画。

如果不依赖像Imagick这样的库来编写函数,我会很谨慎,因为这样的"gotchas"。