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

Тема в разделе "Как сделать...", создана пользователем spiderbuber, 28 июн 2012.

Статус темы:
Закрыта.
  1. spiderbuber

    spiderbuber

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

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

    Поможите добрым советом!
     
  2. D@nil

    D@nil

    Регистр.:
    1 окт 2006
    Сообщения:
    338
    Симпатии:
    122
    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($fh1024 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;
    }
     
    spiderbuber нравится это.
  3. spiderbuber

    spiderbuber

    Заблокирован
    Регистр.:
    20 июл 2009
    Сообщения:
    237
    Симпатии:
    61
    А если сделать проще? Просто условие при выдачи:
    Не сильно ли это будет нагружать БД, если она очень большая и постоянно пополняется?
    Или даже при добавлении изображения в БД делать метку в доп поле, а при выдаче:
    Как ловчее?
     
  4. D@nil

    D@nil

    Регистр.:
    1 окт 2006
    Сообщения:
    338
    Симпатии:
    122
    Для этого варианта подойдет
    Код:
    WHERE image not like '%.gif'
    если база не большая <10000 записей то большой разницы между работой с дополнительным полем не будет mage_type != 1

    А если делать по грамотному то нужно для каждой гиф картинки записать значение в БД анимированная она или нет
     
    spiderbuber нравится это.
  5. spiderbuber

    spiderbuber

    Заблокирован
    Регистр.:
    20 июл 2009
    Сообщения:
    237
    Симпатии:
    61
    Можно линк подтверждающий это?
     
  6. D@nil

    D@nil

    Регистр.:
    1 окт 2006
    Сообщения:
    338
    Симпатии:
    122
    не проще две команды запустить и посмотреть на время выполнения в вашей БД?
     
Статус темы:
Закрыта.