我可以使用php和gd检测动画GIF吗?
我目前遇到一些问题,使用GD调整图像大小。
一切正常,直到我想调整动画gif的大小,它在黑色背景上提供第一帧。
我尝试过使用,但这只会给我尺寸,而没有任何东西可以区分任何gif和动画。getimagesize
动画GIF不需要实际调整大小,只需能够跳过它们就足以满足我们的目的。
有什么线索吗?
PS. 我无法访问 imagemagick。
亲切问候
克里斯
我目前遇到一些问题,使用GD调整图像大小。
一切正常,直到我想调整动画gif的大小,它在黑色背景上提供第一帧。
我尝试过使用,但这只会给我尺寸,而没有任何东西可以区分任何gif和动画。getimagesize
动画GIF不需要实际调整大小,只需能够跳过它们就足以满足我们的目的。
有什么线索吗?
PS. 我无法访问 imagemagick。
亲切问候
克里斯
在寻找相同问题的解决方案时,我注意到 php.net 站点对Davide和Kris所指的代码有后续,但是,根据作者的说法,内存消耗较少,并且可能较少的磁盘密集性。
我将在这里复制它,因为它可能会引起人们的兴趣。
来源:http://www.php.net/manual/en/function.imagecreatefromgif.php#88005
function is_ani($filename) {
if(!($fh = @fopen($filename, 'rb')))
return false;
$count = 0;
//an animated gif contains multiple "frames", with each frame having a
//header made up of:
// * a static 4-byte sequence (\x00\x21\xF9\x04)
// * 4 variable bytes
// * a static 2-byte sequence (\x00\x2C)
// We read through the file til we reach the end of the file, or we've found
// at least 2 frame headers
while(!feof($fh) && $count < 2) {
$chunk = fread($fh, 1024 * 100); //read 100kb at a time
$count += preg_match_all('#\x00\x21\xF9\x04.{4}\x00[\x2C\x21]#s', $chunk, $matches);
}
fclose($fh);
return $count > 1;
}
该函数的PHP手册页面中有一段简短的代码,应该是您需要的:imagecreatefromgif()