Can I detect animated gifs using php and gd?

后端 未结 6 1312
旧巷少年郎
旧巷少年郎 2020-12-02 12:54

I\'m currently running into some issues resizing images using GD.

Everything works fine until i want to resize an animated gif, which delivers the first frame on a b

6条回答
  •  眼角桃花
    2020-12-02 13:47

    While searching for a solution to the same problem I noticed that the php.net site has a follow-up to the code Davide and Kris are referring to, but, according to the author, less memory-intensive, and possibly less disk-intensive.

    I'll replicate it here, because it may be of interest.

    source: 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;
    }
    

提交回复
热议问题