Пишу, по большей части, про историю, свою жизнь и немного про программирование.

Сжатая несжатая ГИФ-анимация

В догонку к предыдущей статье: мне удалось сделать несжатый анимированный ГИФ c сжатием через DEFLATE, вот он ниже (анимация не закциклена):

Там шесть несжатых кадров (цифры «1», «2», «3», «3», «2» и «1») с небольшой задержкой, таблица из 16 цветов, в этом формате (несжатый ГИФ+DEFLATE) файл занял 619 байт:

bolk@Bolk ~  $ telnet bolknote.ru 80
Trying 91.230.61.15...
Connected to bolknote.ru.
Escape character is '^]'.
HEAD /imgs/2012.08.08.1.gif-gz HTTP/1.0
Host: bolknote.ru
Accept-encoding: gzip

HTTP/1.1 200 OK
Content-Type: image/gif
Content-Length: 619
Content-Encoding: gzip

Собранная при помощи gifsicle анимация в формате «обычного» ГИФа занимает 1028 байт, разница в полтора раза. Права, я выключил в gifsicle оптимизацию — иначе gifsicle исключит из изображений повторящиеся части и эксперимент будет нечистым.

17 комментариев
greli (greli.livejournal.com) 2012

Попробовал на лоадерах типа с ajaxload.info, которые я уже пересохранил в Фотошопе для лучшего сжатия. Лучший результат: на 6,4% — с 1737 до 1625. Но в основном результат или незначителен, или даже хуже.

Евгений Степанищев (bolknote.ru) 2012

Комментарий для greli.livejournal.com:

А как выглядел эксперимент?

Евгений Степанищев (bolknote.ru) 2012

Комментарий для greli.livejournal.com:

Я думаю, что вы где-то некорректно провели эксперимент. Я сейчас сделал вот что:

1) взял семь фотографий наугад из альбома фотографий из зоопарка Паттайи: http://fotki.yandex.ru/users/bolknote/album/136352/
2) перевёл их в ГИФ, уменьшил до 400×200
3) перевёл в анимированный ГИФ двумя способами.

gifsicle -O3 дал 470КБ, несжатые ГИФы, собранные «вручную» в анимированный и сжатые gzip — 458КБ.

Это 12КБ разницы только для семикадровой анимации. Если научить gifsicle подключать внутреннюю оптимизацию кадров (когда между кадрами выкидывается всё статичное), но не сжимать сам ГИФ, то можно будет попробовать пережать ролики с какого-нибудь giftube.

Внутреннее Коралио (kalvado.livejournal.com) 2012

Я что-то не так делаю, или оно просто в моей конфигурации анимироваться не хочет?
XP, FF14

Евгений Степанищев (bolknote.ru) 2012

Комментарий для kalvado.livejournal.com:

Сейчас смотрю под «Маком» ФФ 14.0.1, всё ок.

Там анимация конечная (не зацикленная), может момент анимации пропускаете просто.

Евгений Степанищев (bolknote.ru) 2012

Посмотрел, для интереса, как к такому формату Айпад (2-й, АйОС 5.1.1) и «Андроид» (версия 2.3.6) отнесутся. Всё ок.

MiRacLe (miracle.rpz.name) 2012

Chrome 21.0.1180.57 (Linux), картинка статичная...

Евгений Степанищев (bolknote.ru) 2012

Комментарий для miracle.rpz.name:

А после перезагрузки? Я не очень-то правильно собрал анимацию, похоже :) Пару вечеров надо, чтобы написать конвертор получше.

Внутреннее Коралио (kalvado.livejournal.com) 2012

О, заработало

MiRacLe (miracle.rpz.name) 2012

Да, после перезагрузки заанимировалось.

masterspammer (masterspammer.livejournal.com) 2012

И чем больше кадров тем лучше сожмётся.

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

Сжатие Gifа ничего не знает о других кадрах, Zipа — о том, что там вообще есть какие-то кадры.

masterspammer (masterspammer.livejournal.com) 2012

P.S. 3 и более чередующихся кадра — имел в виду не тот случай, когда их всего 3, а например так
1-2-3-1-2-4-1-2-5

а 1-2-1-2-1-3 это можно представить как 1-2(убрать после показа)-0(что-то мелкое, чтоб просто был кадр, например однопиксельник прозрачный)-2(убрать после показа)-0-3.

Евгений Степанищев (bolknote.ru) 2012

Комментарий для masterspammer.livejournal.com:

Я попробую в скором времени написать конвертор, который берёт кадры из уже анимированного файла и делает из этого всего несжатый анимированный ГИФ. Посмотрю что получится.

listai.com.ua 2012

Пишите, будет очень востребовано… За одно и «защиту» от malware туда же вшейте.

Евгений Степанищев (bolknote.ru) 2012

Комментарий для http://listai.com.ua:

Заодно и «защиту» от malware туда же вшейте.

Что имеется ввиду?

masterspammer (masterspammer.livejournal.com) 2012

Комментарий для Евгения Степанищева:

Вероятно от вставки php — <?... :-)

Евгений Степанищев (bolknote.ru) 2012

Комментарий для masterspammer.livejournal.com:

А :)