Могут ли анимированные GIF-файлы изменять палитру?

Компьютерная графика старой школы иногда создавала анимацию (циклы и затухание) без фактического перерисовки чего-либо в видеопамяти, исключительно путем обновления цветовую палитру.

Можно ли это сделать в анимированной гифке? То есть оптимизировать (уменьшить размер файла) gif, предоставив только один кадр (значимого) растрового содержимого, но иметь ли значения цвета обновления каждого (отложенного) кадра анимации в (глобальной) палитре?


person benjimin    schedule 10.01.2018    source источник


Ответы (1)


Краткий ответ: нет.

Согласно существующему стандарту, каждый кадр GIF, содержащий локальную палитру, должен иметь свои собственные данные для отображения с использованием этой палитры, в противном случае локальная палитра бесполезна.

Одним из возможных решений является определение собственного блока расширения приложения GIF (как это сделал Netscape; см. Ссылку) для хранения дополнительных палитры и их временные задержки. Очевидно, эти блоки расширения должны появляться после фреймов, на данные которых они влияют.

Обратной стороной этого подхода является то, что никто, кроме вашего декодера, не будет поддерживать циклическую смену палитры, если ваш тип блока каким-либо образом не станет новым стандартом де-факто.

Тем не менее, ваши созданные вручную GIF-файлы останутся действительными для всех других декодеров GIF (даже без переключения палитры), поскольку стандарт требует, чтобы они молча игнорировали любые расширения приложений GIF с неизвестными им идентификаторами.

person hidefromkgb    schedule 07.02.2018
comment
1. Что, если отдельный кадр GIF не заполняет все изображение: применяется ли локальная палитра к окружающим областям холста? (Иначе нельзя было бы одновременно отображать более 256 цветов?) 2. Нет ли еще глобальной палитры? Может ли отдельный кадр изменить глобальную палитру? - person benjimin; 08.02.2018
comment
@benjimin [1] Нет, каждая локальная палитра принадлежит только тому фрейму, который ее определил; и да, есть GIF-файлы, отображающие более 256 цветов, см. здесь. [2] Да, глобальная палитра может сосуществовать с локальными палитрами, но местные жители имеют приоритет каждый раз, когда они присутствуют; кадры никак не могут повлиять на глобальную палитру. - person hidefromkgb; 09.02.2018
comment
Дополнительные примеры webmasters.stackexchange.com/questions/304/ - person benjimin; 10.02.2018