Есть ли способ проверить наличие анимации на GIF-изображении с помощью PHP или Java? - PullRequest
4 голосов
/ 06 января 2012

Вы знаете, что файлы GIF поддерживают анимацию, но на изображении GIF необязательно должна быть анимация.

Есть ли способ проверить, есть ли на изображении GIF анимация с использованием php или java?

Спасибо.

Ответы [ 2 ]

2 голосов
/ 07 января 2012

Вот небольшой скрипт 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).

1 голос
/ 06 января 2012

На странице руководства php функций imagecreatefromgif () приведен краткий фрагмент кода, который должен быть тем, что вам нужно:

<?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";
            }
    }
    ?>

Его можно легко изменить, чтобы подсчитать количество кадров, если вам нужно.

Смотрите здесь

...