您知道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"。