La siguiente función sirve para detectar si un GIF es animado o no (tiene más de 1 frame).
function isAnimatedGif($filename) { $filecontents=file_get_contents($filename); $str_loc=0; $count=0; # There is no point in continuing after we find a 2nd frame while ($count < 2) { $where1=strpos($filecontents,"\x00\x21\xF9\x04", $str_loc); if ($where1 === FALSE) { break; } $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; } } // gif is animated when it has two or more frames return ($count >= 2); }
También está la siguiente alternativa, más compacta que la anterior:
function isAnimatedGif($filename) { return (bool)preg_match('#(\x00\x21\xF9\x04.{4}\x00\x2C.*){2,}#s', file_get_contents($filename)); }
El código lo he modificado minimamente a partir de lo que he encontrado en los comentarios de http://es2.php.net/manual/en/function.imagecreatefromgif.php
English
8 Comments on "Detectar en PHP si un gif es animado"