@StMechanus

Подсчет кадров в GIF

Как посчитать количество кадров (изображений) в gif анимации имея на руках только байт код файла? Читал спецификацию, выяснил, что декскриптор изображения начинается со сзначения 0х2С, однако как определить, что это именно описание кадра, а не какой то пиксел или еще что нибудь?
  • Вопрос задан
  • 6801 просмотр
Пригласить эксперта
Ответы на вопрос 3
@Fil
Простым способом никак, нужно читать весь файл и считать кадры. А чтобы понимать, что это именно начало кадра, а не что-то другое, нужно читать посекционно. В анимированном гифе image descriptor после Graphic Control Extension (по одной на фрейм), вот их и нужно подсчитать. Алгоритм примерно такой:
  • Читаем секцию Header
  • Читаем секцию Logical Screen Descriptor. Из нее узнаем тип таблицы цветов: глобальная или локальная. Также узнаем размер таблицы.
  • Если глобальная, рассчитываем длину секции Global Color Table и пропускаем.
  • Затем, в анимированном gif будет секция Application Extension block (21 FF). Читаем.
  • А дальше запускаем цикл чтения секций Graphic Control Extension (GCE, 21 F9). Каждой секции соответствует один фрейм.
  •    Читаем GCE
  •    Затем Image Descriptor
  •    После будет несколько секций кодов LZW, перед началом которых будет их длина. Зная длины, перепрыгиваем эти секции по одной. Оказываемся в начале следующего GCE.

Возможно проще воспользоваться сторонним решением :)
Ответ написан
Комментировать
@StMechanus Автор вопроса
Я так же сказал, но в ответ получил «Мы не ищем простых путей» ;)
Ответ написан
Комментировать
demimurych
@demimurych
Достаточно использовать утилиту identify из пакета Imagemagick. Распарсить ее вывод не составит труда.
www.imagemagick.org/Usage/anim_basics/#identify
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы