Как определить gif анимацию?

Статус
В этой теме нельзя размещать новые ответы.

spiderbuber

Гуру форума
Заблокирован
Регистрация
20 Июл 2009
Сообщения
237
Реакции
59
  • Автор темы
  • Заблокирован
  • #1
Можно как-то программно определить gif изображение анимированное или нет?
Нужно для дальнейшей сортировки.. Например, юзер загрузил изображение, в БД внеслась запись статик\анимация. Потом по условию выдаем - показывать статик или анимацию.

Можно конечно тупо сделать проверку на формат - просто jpg считать статикой, а любой gif - анимацией, но ведь не все гифы одинаково анимированные :)

Поможите добрым советом!
 
PHP:
//http://stackoverflow.com/questions/280658/can-i-detect-animated-gifs-using-php-and-gd
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#s', $chunk, $matches);
    }
 
    fclose($fh);
    return $count > 1;
}
 
  • Автор темы
  • Заблокирован
  • #3
А если сделать проще? Просто условие при выдачи:
WHERE image not like '%.gif'
Не сильно ли это будет нагружать БД, если она очень большая и постоянно пополняется?
Или даже при добавлении изображения в БД делать метку в доп поле, а при выдаче:
Как ловчее?
 
Можно конечно тупо сделать проверку на формат - просто jpg считать статикой, а любой gif - анимацией
Для этого варианта подойдет
Код:
WHERE image not like '%.gif'
если база не большая <10000 записей то большой разницы между работой с дополнительным полем не будет mage_type != 1

А если делать по грамотному то нужно для каждой гиф картинки записать значение в БД анимированная она или нет
 
не проще две команды запустить и посмотреть на время выполнения в вашей БД?
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху