Оптимизация GIF

палитра цветов

Оптимизация GIF

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

Палитра и заголовок. Не забывайте, что у любого графического файла есть заголовок. Выбирая пользовательскую палитру в GIF, вы уменьшаете объем, занимаемый растром, но увеличиваете размер заголовка. Это имеет смысл делать при больших размерах изображения, когда заголовок несравнимо меньше, чем данные растра. Для мелких картинок, напротив, иногда выгоднее выбирать стандартную палитру.

Градации серого. Одна из предопределенных палитр — все оттенки серого (Grayscale). Как я уже упоминал, при этом на каждую точку (до сжатия) выделяется по одному байту, а яркость колеблется от 0 до 255. Если у вас есть крупное изображение в серых тонах, сразу возникает соблазн сохранить его в Grayscale. Но не спешите. Если, предположим, картинка содержит всего 16 серых оттенков, лучше отдайте лишние 48 байт на описание палитры, но зато каждая точка займет 4 бита вместо 8.

Точечное размытие, или dithering — это полезнейший прием, позволяющий незаметно уменьшить количество цветов на картинке за счет растрового смешивания. Простейший пример точечного размытия — сетка из белых и черных пикселей, которая выглядит серым квадратом. Есть, конечно, и более элегантные способы его применения

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

Самый простой алгоритм — сетка, где пиксели расположены в шахматном порядке. Обычно он называется «ordered». Но правильный геометрический рисунок далеко не всегда точно передает оттенки, да и к тому же часто приводит к искажениям при масштабировании. Гораздо лучшего эффекта позволяют достичь алгоритмы Floyd-Steinberg, Jarvis, Stucki — попробуйте и проследите за результатом.

Анимация. При создании анимированных GIF-картинок вы работаете с набором кадров. Настраивается число повторов, продолжительность пауз между кадрами и другие параметры, но применительно к оптимизации нас интересует пункт «Хранить разницу между соседними кадрами». Если у соседних кадров есть хоть что-то общее, то обычно выгоднее записывать в файл не полные кадры, а только измененную часть.

Прозрачность. Если вы заранее планируете сделать часть изображения прозрачной, подберите в качестве «прозрачного цвета» оттенок, наименее похожий на остальные. В противном случае именно он среди прочих может быть использован программой в качестве замены близкому цвету, выбывшему из палитры при ее сокращении. Тогда картинка получится «дырявой» в самых неожиданных местах, и потребуется много возни для закрашивания этих «дыр».



Источник: http://www.lki.ru