Сжатая несжатая ГИФ-анимация
В догонку к предыдущей статье: мне удалось сделать несжатый анимированный ГИФ 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 исключит из изображений повторящиеся части и эксперимент будет нечистым.
Попробовал на лоадерах типа с ajaxload.info, которые я уже пересохранил в Фотошопе для лучшего сжатия. Лучший результат: на 6,4% — с 1737 до 1625. Но в основном результат или незначителен, или даже хуже.
Комментарий для greli.livejournal.com:
А как выглядел эксперимент?
Комментарий для greli.livejournal.com:
Я думаю, что вы где-то некорректно провели эксперимент. Я сейчас сделал вот что:
1) взял семь фотографий наугад из альбома фотографий из зоопарка Паттайи: http://fotki.yandex.ru/users/bolknote/album/136352/
2) перевёл их в ГИФ, уменьшил до 400×200
3) перевёл в анимированный ГИФ двумя способами.
gifsicle -O3 дал 470КБ, несжатые ГИФы, собранные «вручную» в анимированный и сжатые gzip — 458КБ.
Это 12КБ разницы только для семикадровой анимации. Если научить gifsicle подключать внутреннюю оптимизацию кадров (когда между кадрами выкидывается всё статичное), но не сжимать сам ГИФ, то можно будет попробовать пережать ролики с какого-нибудь giftube.
Я что-то не так делаю, или оно просто в моей конфигурации анимироваться не хочет?
XP, FF14
Комментарий для kalvado.livejournal.com:
Сейчас смотрю под «Маком» ФФ 14.0.1, всё ок.
Там анимация конечная (не зацикленная), может момент анимации пропускаете просто.
Посмотрел, для интереса, как к такому формату Айпад (2-й, АйОС 5.1.1) и «Андроид» (версия 2.3.6) отнесутся. Всё ок.
Chrome 21.0.1180.57 (Linux), картинка статичная...
Комментарий для miracle.rpz.name:
А после перезагрузки? Я не очень-то правильно собрал анимацию, похоже :) Пару вечеров надо, чтобы написать конвертор получше.
О, заработало
Да, после перезагрузки заанимировалось.
И чем больше кадров тем лучше сожмётся.
А самый звездец для формата (3 и более чередующихся разных кадра, 2 ещё можно как-то способом удаления обыграть), когда gif пухнет страшно, такому типу сжатия не страшен совершенно.
Сжатие Gifа ничего не знает о других кадрах, Zipа — о том, что там вообще есть какие-то кадры.
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.
Комментарий для masterspammer.livejournal.com:
Я попробую в скором времени написать конвертор, который берёт кадры из уже анимированного файла и делает из этого всего несжатый анимированный ГИФ. Посмотрю что получится.
Пишите, будет очень востребовано… За одно и «защиту» от malware туда же вшейте.
Комментарий для http://listai.com.ua:
Что имеется ввиду?
Комментарий для Евгения Степанищева:
Вероятно от вставки php — <?... :-)
Комментарий для masterspammer.livejournal.com:
А :)