руководство Color Quantizer:

advertisement
Color Quantizer: руководство
Color Quantizer – утилита, объединяющая под «общей крышей» инструменты для оптимизации
графики. Под «оптимизацией» понимается компромисс между качеством оригинала и размером
результирующего файла. Программа создана в период 2009…2015 сумрачным гением x128, и им
же уничтожена. Скачать последнюю версию можно здесь: http://kherson.myftp.biz/cq/
Главные возможности:







Квантизация - создание палитровых картинок.
o Маски качества – можно выделить критичную зону на изображении.
o Полуавтоматическая и удобная ручная доводка палитры до идеала.
o Выбор оптимального цветового пространства.
o Высококачественные алгоритмы dither’а/штриховки.
Усиленное сжатие PNG – используется движок zopfli-png.
Оптимизация png-формата внутри файлов иконок ico.
Захват скриншотов, в том числе полупрозрачных окон.
Качественный алгоритм изменения размера картинки.
Пред- и пост-обработка изображения.
o Фильтрация JPEG-артефактов.
o Подрезка шумного альфа-канала.
o Преобразования «яркость-в-альфу» и «цвет-в-альфу».
Пакетное сжатие/квантизация.
Практически до всех возможностей программы можно добраться одним-двумя кликами мыши.
Однако без чтения этого нудного руководства, боюсь, вам не найти и половину спрятанных в CQ
«фич». ;)
Познакомимся с программой, пройдясь по панели инструментов слева направо.
Открыть файл можно через кнопку панели инструментов, можно просто перетаскиванием, либо с
командной строки. Можно перетащить в окно программы сразу файл и палитру к нему, и она
сразу применится. Можно перетаскивать картинки напрямую из некоторых браузеров, например,
из Сафари.
Пакетное преобразование в PNG.
Сверху выбираем папку назначения,
снизу – исходные папки. Можно
выбрать уровень сжатия (сильнее –
дольше), можно удалить после сжатия
исходники (опасно!), можно заставить
программу сохранить у файлов
оригинальные дату-время. Доступно
меню квантизатора – можно
совместить сжатие с уменьшением
количества цветов и штриховкой.
Кроме того, там же доступно пакетное преобразование «Image to Alpha» - это может пригодится
при подготовке электронных книг. Можно добавлять файлы и папки через кнопки справа, либо
просто перетаскивать их в окно программы. При обработке файлы, чей результирующий размер
получается больше исходного просто копируются без преобразования. По окончании
преобразования будет звуковой сигнал и табличка со статистикой.
Хинт: Если не выбрать папку назначения - перезапишутся исходные файлы.
Кнопка «Запись»:





По умолчанию предлагается PNG. Справа можно выбрать степень сжатия и опцию Forced
RGB - принудительную запись в полноцветном формате (для палитровых картинок).
Степень сжатия также зависит от количества итераций zopfli-алгоритма, настройка
доступна через опции (соседняя кнопка на панели инструментов). Выбор «степени
сжатия» External Script позволяет подключить внешние скрипты; это может оказаться
необходимым только для «рекордного», экстремального сжатия.
Хинт: CQ может ооочень долго думать, пока идет запись PNG. Выбирайте мощную
оптимизацию лишь тогда, когда она вам действительно нужна.
GIF – записывается статичный GIF89A для палитровых картинок с количеством цветом до
256 включительно; а если количество цветов больше 256 – записывается анимированный
gif с нулевыми задержками между кадрами, что позволяет получать так называемые
«полноцветные gif’ы». (В этом режиме у каждого кадра своя собственная палитра, что
позволяет обойти ограничение gif-ов на 256 цветов).
BMP – записываются картинки в 32-битовом формате. Позволяет сохранять в BMP
прозрачность, но эта возможность поддерживается далеко не всеми программами.
TGA – записывается в 32-битном формате. В отличие от PNG и GIF, при записи TGA/BMP не
очищаются невидимые пиксели холста (пиксели, замаскированные альфа-каналом), что
может быть ценно, например, при разработке текстур для игр.
WebP и BPG – запись исключительно в формате «сжатие без потерь», экспериментальная
поддержка.

Lossy – JPEG – сжатие при помощи mozjpegмодуля. Доступны опции выбора цветового
пространства RGB/YUV (CMYK не
поддерживается). Выбор цвета “Matte” – выбор
фона для картинок с прозрачностью. Меню
subsampling дает доступ к возможностям jpeg-а
по уменьшению объема хранимой информации
о цвете (меньше размер файла – больше
артефактов). Переключение в “Chroma Quality –
Frequency” означает выбор сабсемплига 4:4:4, но
с возможностью плавного подавления
информации о цвете движком справа. Пока
открыто меню выбора качества JPEG-а, картинка
в главном окне показывает предварительный
просмотр искаженного сжатием изображения.
Вернуться к оригинальной картинке временно
можно, удерживая нажатой левую кнопку мыши на изображении. Кроме того, доступно
увеличение колесиком мыши и клавишами + - цифровой клавиатуры.
Options – настройки компрессора PNG и захвата скриншотов.
Закладка PNG - advanced.


Управление количеством проходов zopfliкомпрессора PNG. Больше – лучшая степень сжатия,
но медленней. Значение по умолчанию 5; и выше 30
его, вероятно, нет смысла закручивать.
Путь к внешнему скрипту. Кажется, кроме автора
программы, никто другой не знает, как эти скрипты
работают. У меня нет информации, как эту
возможность использовать.
Закладка Screen Capture – управление захватом
скриншотов.




Enable – включить/выключить горячие клавиши.
Capture Cursor – захватывать ли курсор над окнами.
Фича: CQ пытается сымитировать курсор и его
тень так, чтобы это выглядело полностью
естественно, причем учитывается даже
запущенная версия Windows.
Disable Clear Type – при захвате CQ пытается
временно отключить сглаживание шрифтов, сделать
скриншот, и затем включить сглаживание обратно.
Смысл операции - меньший размер скриншотов
после сжатия. Иногда опция даёт забавные сбои, например, полупустое окно – текст не
успевает до начала захвата.
Hotkeys – по умолчанию работают клавиши, указанные справа, но можно назначить и
свои, в левой части таблички. Backspace очищает назначенную клавишу. Fullscreen – захват
экрана целиком (только текущий монитор), Active Window – захват текущего окна, Active
window with alpha – захват полупрозрачного окна или окна с тенью.
Хинт: Захват полупрозрачного окна работает так: под окно подкладывается сначала
подложка черного цвета, производится первый захват, затем подложка белого цвета, ещё раз
захват. По разнице захваченных изображений восстанавливается прозрачность и цвет в
полупрозрачных областях картинки. Такой метод захвата накладывает кое-какие
ограничения: окно с анимацией/видео таким методом не захватишь: разница в кадрах
анимации будет принята программой за разницу в прозрачности и получится странное,
двоящееся полупрозрачное изображение.
Кнопки Copy / Paste. Копировать – вставить. Полезно знать, что CQ не копирует в буфер
прозрачность и не принимает её. Копирование полупрозрачной картинки на самом деле загонит
её в буфер вместе с подложкой – именно в таком виде, как она была видна в главном окне.
Работают обе пары горячих клавиш Ctrl+C/Ctrl+V и Ctrl-Ins/Shift-Ins.
Кнопки Undo и Redo. Отменить / сделать заново последние манипуляции.
Кнопки группы Quality Mask.
«Маска качества» - способ описать, какие части
картинки «наиболее важны» при
формировании адаптивной палитры. Поясню на
примере: вы уменьшаете количество цветов у
портрета, и хотите, чтобы лицо вышло как
можно лучше - для этого достаточно просто
закрасить физиономию кисточкой в режиме
“Edit quality mask”.




Edit quality mask – включает/выключает режим рисования.
Brush – изменение размера кисти и её жесткости. Чем жестче кисть – тем больший
диапазон палитры будет отведен под цвета под маской.
Eraser – позволяет кисточкой стереть излишки маски.
Clear mask – очищает всю маску целиком.
Кнопка Color Correction. Экспериментальное средство, позволяющее избавиться от шума/мусора,
который нередко встречается самых светлых или напротив, самых темных областях цветовых
каналов, а также в канале прозрачности. К сожалению, предварительный просмотр у этого
инструмента не доработан, поэтому «целиться» им довольно затруднительно.
Хинт: Если хотите избавиться от «краевого» шума в альфа-канале не совсем вслепую,
зайдите сперва в Convert -> Alpha to simple transparency, наметьте, где кончается и начинается
шум, а затем вернитесь в режим Color Correction и на глаз подрежьте альфа-канал.
Кнопка Filter.
Инструмент, главным образом предназначенный для борьбы с артефактами JPEG-а. Позволяет
если не совсем их побороть, то по крайней мере, значительно уменьшить. Может использоваться
и не по прямому назначению – например, восстанавливать резкость у картинок некоторых сортов,
вроде плакатов, после изменения их размера. Примерный принцип работы – осматривает
соседние пиксели, и пытается подстроить цвет текущей точки под «большинство».
Элементы управления:





Search area – размер зоны поиска. Для jpeg-а обычно 3…4. Но если, к примеру, наш jpeg
кто-то увеличивал, стоит и зону поиска расшить.
Filter strength – насколько сильно применять фильтр. Подбирается «методом тыка»,
индивидуально для каждой картинки.
Aggressive – обычно алгоритм старается «не хулиганить» в близи границ цветов, но можно
заставить его сглаживать всё подряд.
Apply – применить фильтр к предварительному просмотру. (Как обычно, можно временно
вернуться к изначальной картинке, удерживая нажатой левую кнопку мышки на
изображении).
OK – применить фильтр окончательно и закрыть окно параметров фильтра.
Группа кнопок Quick Add Color и Recalculate. Эти кнопки относятся к ручному составлению
палитры (об этом способе подробности будут дальше). Вкратце, Quick Add Color – включает
режим, в котором при добавлении нового цвета в палитру (средней кнопкой мыши) обновляется
не весь холст изображения, а лишь область вблизи курсора. Нажатие же Recalculate в этом
режиме обновляет весь холст. Такой необычный режим нужен редко - лишь при работе с
большими полотнами, когда добавление очередного цвета может заставлять CQ задумываться
более чем на секунду.
Кнопка Image Resize. Изменение размеров картинки.
Кроме вполне очевидных кнопок меню содержит
два движка “Sharpen”. Верхний движок позволяет
поднимать резкость до собственно ресайза, а
нижний – уже после. Радиокнопки less/more
управляют размером матрицы восстановления
резкости – радиус 3х3 и 5х5 (кажется)
соответственно.
Хинт: Верхний движок “Sharpen” важнее нижнего.
Предварительное наведение резкости до
уменьшения позволяет лучше сохранить мелкие
детали изображения.
Хинт: Если вы уменьшаете изображение до
размера 2:1 и меньше – попробуйте алгоритм Box,
зачастую они дает наилучшие результаты.
Однако, для диапазона 51...99% размера этот
алгоритм не работает вовсе.
Хинт: Для увеличения изображения неплохо работает алгоритм Bicubic, но в целом, лучше
избегать увеличения; оптимальнее в таких случая поискать более качественный оригинал.
Инфо: Если изображение содержит прозрачность (альфа-канал), то:


Вне зависимости от выбора алгоритма изменения размера (за исключением nearest),
альфа канал будет отмасштабирован алгоритмом Bilinear. На эту меру пришлось пойти,
чтобы избавиться от «звона» (волн) вокруг границ прозрачности.
Невидимые части холста (скрытые альфа-каналом) вблизи границ прозрачности будут
заменены на цвета смежных не- и полу-прозрачных пикселей границы. Зачем это нужно?
Без этой манипуляции цвета границ будут смешиваться с далеко не всегда корректными
невидимыми пикселями, и спрайт может получить каёмку из черного или иного, не
характерного для исходной картинки цвета.
Хинт: иногда автор этих строк специально делает «ресайз» 1:1 – то есть,
фактический размер и изображение картинки не изменяется, но под прозрачностью
«наводится порядок», и после записи в TGA получаются качественные текстуры для
игр, дающие гораздо меньше краевых артефактов при сжатии текстур в DXT1a/3/5.
Увидеть холст под прозрачностью можно с помощью Ctrl + удерживание клика левой
кнопки мыши на холсте.
Кнопка Canvas Resize. Изменение размеров холста.
Кнопка Crop. Обрезка.
Начало выделения – левая кнопка мыши, окончательная обрезка – Enter.
Хинт: во время обрезки, как и во время прочих операций, работает изменение масштаба
колесиком мышки и кнопками + - цифровой клавиатуры.
Кнопка Auto crop borders.
Автообрезка. Попытка обрезать края картинки, заполненные одним и тем же цветом, например,
белым.
Теперь обратим внимание на правую панель программы.
Сверху-вниз – диаграмма уровней, блок управления
палитрами, и чуть ниже, сама палитра. После загрузки
картинки панель можно включить/выключить кнопкой [~].
После загрузки картинки диаграмма покажет распределение
цветов по каналам, что дает некоторую полезную
информацию – например, «рваная» диаграмма укажет, что
картинка уж была некогда палитровой. Когда курсор мыши
двигается над картинкой, диаграмма заменяется на
увеличенный фрагмент изображения под курсором, а клик
мышью по картинке заставит зафиксировать цвет под
курсором на панели палитры – для его изучения или
сравнения с другой точкой.
Под диаграммой у нас кнопки управления палитрой. Боюсь,
для объяснения их работы придется задержаться надолго.
Блок из трех элементов управления – выпадающий список
количества цветов, безымянный движок и кнопка ОК
представляют собой дубли элементов управления из куда
более обширного меню “Quantizer Settings” (кнопка с
палитрой). Они нужны для преобразования картинки «на
скорую руку». Например - загружаем картинку, в выпадающем меню выбираем «256 цветов»,
нажимаем ОК (появляется сгенерированная палитра), и можно записывать нашу картинку. Однако
точная настройка параметров может дать лучший результат, об этом ниже.
Кнопка “Quantizer Settings” откроет плавающее меню, отвечающее за генерацию палитры
(“Advanced”) и штриховку (“Dithering”).
Выпадающий список “Palette” – обычно используют адаптивную палитру (палитра,
сгенерированная под конкретное изображение), но CQ несет с собой и несколько готовых палитр
– серую, uniform 3/3/2 (256 цветов с равномерным распределением), и стандартные Windows 256
и Windows 16 палитры. Пункт “custom” отвечает загруженной внешней палитре.
Number of colors – указание количества цветов для адаптивной палитры.
Далее у нас три движка настроек генератора палитры. Сразу скажу, что двигать их приходится
нечасто. Верхний отвечает за приоритет «гладкие цветовые переходы» - «больше набор цветов»;
на картинках с плавным заполнением иногда есть смысл попробовать оттащить этот движок левее
(безымянный движок на панели главного окна – дубль этого элемента меню). Средний движок –
«резервирование пространства для редких цветов», и нижний - «граница детектирования редких
цветов». Как это работает? При генерации палитры похожие цвета смешиваются, усредняются. Но
если использовать этот механизм «на всю катушку», все яркие маленькие фрагменты картинки
«погаснут», поэтому часть палитры резервируется под цвета, которые слишком не похожи на
остальные, и лучше их не смешивать по-отдельности. Коротко говоря, если у вас нет
выделяющихся цветом деталей на изображении, тащим средний движок влево; если такие части
есть и «потухли» при генерации палитры – тащим этот же движок вправо, попутно пытаясь
подобрать нижним движком границу отсечки. Еще раз напомню – как правило, эти телодвижения
не нужны; алгоритм с настройками по умолчанию неплохо справляется с составлением палитр.
Галочка “do not mix colors”. Иногда
нужно сгенерировать палитру так,
чтобы в нее вошли только цвета с
исходной картинки, а не их
усредненные значения. Палитра в
этом случае будет составлена только
из тех цветов, что присутствуют в
оригинальном изображении. В целом
такой подход ухудшает качество
палитры, и нужен лишь изредка.
Выбор цветового пространства. По
умолчанию расчет «цветовых
расстояний» ведется в «системе
координат» Lab. Однако для
некоторых проблемных картинок
можно попытаться взять другую
систему; я упомяну их в порядке
значимости: LAB, LUV, YUV, YCoCg и
HAAR.
Безымянный счетчик правее кнопки
«Сброс» отвечает за важную вещь –
приоритет яркости (большие значения) перед цветностью (маленькие значения). Мы называем
этот параметр (немного неверно, но, так уж сложилось) – «Психовизуалка». Важно знать
следующее – на яркость для человеческого глаза важнее, чем на цветность. Поэтому, несмотря на
то, что фактически при закручивании этого счетчика в большую сторону появляются искажения
цветов – картинка может выглядеть более гладкой и красивой, чем при нулевых, математически
правильных значениях. На практике, при конвертации в 256 цветов значение этого счетчика лучше
всего держать в пределах 2…4, а при конвертации в 16 цветов 0..1.
Безымянный выпадающий список цветов. Адаптация полупрозачности к конечной подложке.
Пример – мы генерируем спрайт, который будет показываться на белой html-страничке. В таком
случае, можно сразу выбрать подложку White – и наш спрайт будет идеально смотреться на
любом светлом фоне, а вот на темном в зоне прозрачности могут появиться артефакты. Первое
значение – перечеркнутый квадратик – означает отказ от адаптации под конкретный цвет.
Кнопка Apply – применить текущие настройки.
Штриховка – dithering.
Суть штриховки – улучшить цветопередачу при скудной палитре. Глаз усредняет цвета рядом
стоящих точек – например, поле, усеянное мозаикой из красных и зеленых точек воспринимается
как желтое.
Рекомендации по штриховке.
Если для вас важен размер файла – постарайтесь обойтись без штриховки, она ухудшает сжатие
PNG и GIF файлов.
Основные алгоритмы штриховки – Shiau-Fan / Floyd-Steinberg (я так и не уловил, в чем между ними
разница, обычно я обобщенно называю эти алгоритмы просто “Floyd”) и Pattern (алгоритм
Фотошопа).
Для «Флойда» лучшее положение движка заполнения (‘dither amount’) где-то 75…80%, но во
многих случаях допустимо и 95…100%.
Для «Паттерна» с матрицей 2х2 лучшее положение заполнения 100%. Для остальных матриц
«Паттерна» оптимален выбор в 50%.
Для «Аткинсона» лучший выбор – 100% заполнение.
Остальные имеющиеся в CQ алгоритмы дают столь смехотворные результаты, что использовать их
на практике нет смысла.
Галочка «mask edges» отключает штриховку вблизи границ цветом изображения. В некоторых
случаях это может улучшить читаемость текста на картинке или подчеркнуть резкие границы. Эта
опция редко бывает нужна.
Галочка “Soft” пытается подсунуть в штриховку лишь близкие, с точки зрения метрики цветового
пространства цвета. На практике это означает, что пропадут «вырвиглазые» яркие точки, иногда
возникающие при классической штриховке, но точность цветопередачи упадет, впрочем,
незначительно. Рекомендуется использовать эту опцию при положениях движка заполнения
штриховки близких к 100%. Довольно часто используемая опция.
В нижней части окна мы видим, во-первых, протокол преобразования, в котором видны
некоторые технически подробности, а во-вторых метрику ошибок («насколько наше полученное
изображение отличается от оригинала»; лично я бы посоветовал не увлекаться метриками, а
сравнивать «на глаз»).
Вернемся от меню квантизатора к правой панели
программы.
Кнопка сортировки палитры – бывает полезна при
ручном составлении палитры. Можно отсортировать
цвета в палитре по популярности, яркости или по
цвету.
Кнопки «открыть палитру», «сохранить палитру».
Поддерживаются форматы текстовый JASC .pal и
бинарный фотошоповский .act. Предпочтителен
формат .pal – он универсален: можно править файл в
текстовом редакторе, поддерживается прозрачность,
и нет ограничения на количество цветов.
На поле под кнопками палитры отображается текущий цвет, его шестнадцатиричное
представление и его прозрачность. Если кликнуть это поле, откроется Color Picker, а сама
операция является вызовом замены цвета на картинке. Про Color Picker я скажу только одну
интересную вещь – пипетка, которая находится в этом меню, позволяет брать образец цвета с
любой части экрана рабочего стола, не только из окна CQ.
Когда имеется сформированная или загруженная палитра, клик и удержание на цвете подсветит
его на загруженной картинке. Клик правой кнопкой вызовет меню: replace – замена цвета (причем
это не «подбор», а именно замена на картинке), add – добавить через color picker (но есть и
другой способ – кликом колесика – ниже), delete – удалить цвет из палитры, remove double/unused
– удалить все дубли цветов и все неиспользуемые на картинке цвета.
В сетке палитры некоторые цвета могут быть отмечены небольшими квадратиками: так
помечаются цвета с прозрачностью. Клик колесиком мышки по цвету делает его полностью
прозрачным; повторный клик – полностью непрозрачным.
Теперь перейдем к центральной части окна, к собственно загруженной картинке.




Удержание левой кнопки мыши на холсте, во-первых, показывает картинку до
применения палитры – очень удобно оценить, насколько изменилось изображение. Вовторых, если картинка не помещается в окно, можно скороллить её, пока нажата кнопка
мыши.
Ctrl + ЛКМ (левая кнопка мыши) покажет всё скрытое под маской альфа-канала.
Ctrl + Shift + ЛКМ показывает собственно альфа канал, без RGB-каналов.
Alt + ЛКМ покажет распределение ошибки, т.е., в каких областях после формирования
палитры картинка наиболее отличается от оригинала.
Клик правой кнопкой вызовет меню, касающееся
подложки картинки, некоторых её
преобразований и палитры:
Split image with alpha – разбивает исходное
полупрозрачное изображение на два отдельных
файла, в первом окажутся все полностью
непрозрачные пиксели, а во втором – все пиксели
с полупрозрачными цветами. Это преобразование
редко используется. По мотивам статьи
С.Чикуенка https://www.artlebedev.ru/tools/technogrette/img/png-2/
Alpha Background – выбор подложки, на фоне которой мы будем любоваться картинкой. По
умолчанию это сетка серых квадратиков, но можно также выбрать сплошной цвет, или подложить
произвольную картинку.
Convert – преобразование изображения:





Alpha to Simple Transparency – преобразование полупрозрачных областей в полную
прозрачность, либо в полную непрозрачность. Граница отсечки задается движком
Treshold. Доступно штрихование, выпадающее меню Dithering. Штриховка будет
применяться к альфа-каналу исключительно; в таком случае её выбора движок Treshold
изменит название на Amount – глубину штриховки. С левом нижнем углу располагает
кнопка Matte, с помощью которой мы можем подмешать к полупрозрачным пикселям
некий цветовой фон (это сделает картинку складнее на конкретно этом фоне, но хуже на
любом другом). Меню «Alpha to Simple Transparency» годится не только для
преобразований, в частности, с его помощью можно легко оценить границы
полупрозрачности, например - теней.
Image To Alpha и Color to Alpha. Попытка из непрозрачной картинки сделать
полупрозрачную. Оба эти преобразования чаще всего нужны для подготовки электронных
книг, а также текстур для компьютерных игр.
o Image To Alpha – RGB-каналы холста заливаются черным цветом, а альфа-канал
заполняется яркостью исходной картинки.
o Color to Alpha – альфа канал заполняется аналогично «Image To Alpha», но RGBканалы заполняются премультиплицированным с прозрачностью значением. В
результате получается цветная картинка с прозрачностью. Свойства её таковы она хорошо ложится на светлый фон, а вот на темный – отвратительно.
Fake Color – картинка становится «полосатой», в четных строках остается только один из
каналов (например, R), в нечетных – остальные каналы (например GB). Это
преобразование здорово сужает цветовой диапазон изображения (картинка становится
темнее), но одновременно на порядок снижает количество необходимых цветов.
Подсмотрено в какой-то древней графической демо-программе, ещё под DOS-ом.
Практически бесполезное преобразование, оставленное шутки ради.
Middle Button Click – управляет назначением средней кнопки мыши (кликом колесика).
Есть два варианта – по умолчанию клик колесиком добавляет цвет под курсором в
палитру. Во втором случае новый цвет в палитру не добавляется, но программа находит
ближайший похожий цвет в палитре, и заменяет его на указанный (актуально в малоцвете,
в 16 цветах). Оба эти сценария очень важны и востребованы. Случается, что программа не
в состоянии составить идеальную палитру. В таком случаем мы можем либо составить
палитру «с нуля», либо попросить программу сделать неполную палитру (например, 240
цветов), а остаток «накликать» вручную. Как показывает практика, ни один алгоритм ни у
одной программы не в состоянии сгенерировать палитру лучше, чем вот такой «полуавтомат».
Zoom – увеличение. Непонятно, зачем нужно это меню, ведь увеличение можно в любой
момент изменить колесиком мыши, или плюсом/минусом «нампада».
Оптимизация png-кадров в ico-файлах иконок
Открыв в CQ файл иконки, можно преобразовать её
отдельные кадры в PNG-формат, что поддерживается
Windows начиная с Vista (в XP не поддерживается). Для
совместимости, обычно в ico-контейнер укладываются
стандартные XP-иконки начиная с 16х16 и заканчивая
48х48, а также один png-кадр с иконкой 256х256 для
Vista/W7. Утилиты, записывающие иконки, обычно не
содержат оптимизатора PNG, поэтому CQ может помочь
уменьшить ico-файл, причем, без потери качества.
При открытии иконки остается висеть плавающее меню со списком кадров. Если закрыть
плавающее меню, то CQ продолжит работу с текущим кадром, как с обычным графическим
файлом. Но если не закрывать окно, кнопка “Save” в главном окне будет обновит иконку внутри
контейнера, а кнопка “Save icon” позволит записать измененный ico-контейнер.
Приложение: Зависимость степени сжатия и затрат времени от режима записи
В этом приложении оценивается эффективность сжатия «не-рекордных», обычных режимов. Для
оценки будем использовать пакетный режим сжатия CQ, а именно – статистику, которую он
сообщает по окончанию процесса.
Режим
fast
normal
slow
very slow - zopfli: 15
Результирующий
объем файлов, %
100%
99,7%
97,8%
96,8%
Время сжатия, %
100%
745%
796%
1 457%
Среднее время сжатия
на рисунок*, с
0,5
3,8
4,1
7,5
«Среднее время сжатия» - приведено ориентировочно, так как сильно зависит от размера
изображения, его содержимого, и, разумеется, мощности компьютера, на котором запущен
оптимизатор. В данном случае сжималась коллекция из разнообразных картинок с размерами от
100х100 до 300х300 на микропроцессоре Intel i5.
Может возникнуть вопрос – почем столь незначительна разница между «fast» и «very slow» - всего
лишь 3% выигрыша, при 15-кратном увеличении времени записи? Для начала, режим “fast” в CQ
не такой уж и быстрый; он в разы медленнее записи в Photoshop’е – хотя бы потому, что в нем уже
выполняется базовая оптимизация. А финальная разница получается вот как: всё дело в том, что
программа по ходу работы пытается применить разные стратегии оптимизации; чем медленней
режим – тем больше стратегий будет опробовано. Однако, стратегии отсортированы в порядке
убывания статистически удачного срабатывания. Т.е., в режиме slow по сравнению с fast будут
опробованы почти в десять раз больше вариантов оптимизации, но мы заранее знаем, что все эти
дополнительные варианты очень редко «стреляют» удачно.
Стоит учесть: часть стратегий оптимизации рассчитаны исключительно под PNG-8 – картинки с
палитрой. Для нас это значит, что палитровые картинки, хотя и дают выигрыш в размере,
записываются, как правило, значительно медленней PNG-24.
Приложение: Степень сжатия в режиме “Very Slow” в зависимости от настроек zopfli
В максимальном режиме сжатия (“very slow”) итоговый размер файла зависит от количества
итераций алгоритма zopfli. Настраивается через панель инструментов – Options – PNG – Very slow.
Зависимость качества сжатия от количества проходов алгоритма нелинейна и отчасти напоминает
лотерею: чем больше билетов мы купили (количество итераций), тем больше шансов получить
выигрыши (шансов алгоритма найти более удачную комбинацию для сжатия). Но бывает и такое,
что хорошего выигрыша не случается вовсе, даже несмотря на чудовищные накладные расходы.
Для примера мы возьмем некий один абстрактный графический файл – маленькую картинку
размером 256х192 пиксела. Результаты типичны, и дадут понимание порядка затрат и выигрышей.
Количество
итераций
1
5
10
15 (по умолчанию)
20
30
50
100
200
300
500
1 000
5 000
10 000
20 000
50 000
99 999
Размер файла,
байт
46 657
46 657
46 657
46 657
46 314
45 600
45 597
45 584
45 561
45 558
45 552
45 514
45 506
45 502
45 495
45 492
45 493 (sic!)
Дополнительный
выигрыш, %
0
0
0
0,74
2,27
2,27
2,30
2,35
2,36
2,37
2,45
2,47
2,48
2,49
2,50
2,49
Время сжатия, с
2,6
2,7
3,0
3,1
3,3
4
5
7
12
15
23
43
206 (3,5 минуты)
408 (7 минут)
815 (14 минут)
2 153 (36 минут)
4 123 (69 минут)
Дополнительный
выигрыш, байт
0
0
0
343
1 057
1 060
1 073
1 096
1 099
1 105
1 143
1 151
1 155
1 162
1 165
1 164
Как видно, более 100 итераций запускать практически бессмысленно: выигрыши исчисляются
единицами байт, а потери времени – минутами. Однако… в любом случае приятно иметь
инструмент, который «в случае острой необходимости» позволит получить рекордный результат
сжатия.
Кроме того, стоит учесть, что скорость сжатия обратно зависит от площади картинки, и, в случае
совершенно безумного сочетания большого изображения и высоких итераций, сжатие может
продолжаться… годами.
Приложение: Практический пример: подготовка спрея/текстуры для игры TF2
Вам может показаться, что эта процедура обременена излишествами, но это не так. Каждый шаг
здесь позволяет сохранить максимальное качество на выходе.
Загружаем исходную картинку, пусть это будет JPEG размером 700х400.
В первую очередь, нажимаем на панели кнопочку Filter – попытаемся частично убрать артефакты
сжатия JPEG. Можно сразу кликнуть по картинке, и крутануть слегка колесико мыши вверх – чуть
добавим увеличение, чтобы яснее видеть, что мы творим. Нажимаем Apply. Нажимаем и
отпускаем ЛКМ на картинке, чтобы оценить – не пострадала ли картинка от фильтра, не слишком
ли много артефактов осталось. Подстраиваем движки в случае необходимости, опять Apply. Когда
качество станет удовлетворительным, жмем Ок.
Теперь позаботимся о размере. TF2 требует спреи размером 512х512, а у нас 700х400. Нажимаем
сначала Canvas Size, устанавливаем размер холста по большей стороне нашего изображения, т.е.
700х700. Теперь нажимаем Image Size, указываем 510 или 508 (не 512!) пикселей ширины.
Подбираем алгоритм уменьшения, и одновременно пытаемся подкрутить верхний движок
резкости – останавливаться с ним нужно до того, как появятся характерные «волны» вокруг
границ. Можно ещё чуть-чуть добавить резкости нижним движком, как правило, не более 5%.
Жмем Ок.
Опять заходим в Canvas Size, указываем 512х512, ок.
Опять заходим в Image Size, оттаскиваем движки резкости влево; указываем размер 1:1, алгоритм
любой, но на всякий случай укажем Nearest, ОК.
Убеждаемся, что под маской прозрачности у нас всё окей – жмём Ctrl+ЛКМ – от границ
прозрачности должны тянутся характерные «шлейфы», ради них и затевались «пляски с бубном» в
случае последнего «ненастоящего» изменения размера (после Canvas Size эти полезные
артефакты алгоритма изменения размера пропадают). Эти «шлейфы» помогут на этапе
формирования mipmap-текстур с DXT сжатием – текстура по краям будет заметно качественней;
особенно это актуально не для прямоугольных картинок, а для «фигурной» прозрачности.
Почему не стоило сразу указать 512х512? Потому, что видеоакселератор – довольно тупое
устройство. Лучше оставлять текстуре хотя бы 1 пиксель прозрачности по краю, в противном
случае, когда текстура будет уже в игре, вы увидите по краю каемку от пикселей с другого края
картинки (они смешиваются при отрисовке акселератором, при увеличении со сглаживанием), эта
линия тонкая, примерно в треть пикселя исходного изображения, но иногда она довольно
заметна.
Теперь запишем наше изображение в формате TGA и передадим его какой-нибудь программе,
выполняющее DXT-сжатие, например, VTFEdit.
Готово.
Известные проблемы CQ:
Пакетное преобразование – при выборе папок неудачно обходится дерево, все вложенные папки
после сжатия окажутся в корне папки назначения.
Захват окна с прозрачностью – легкое нарушение цвета захваченных окон; синий канал на
единичку меньше оригинала. Визуально скриншоты ничуть не страдают.
При ещё-не-загруженной картинке некоторые элементы интерфейса реагируют на нажатия
ошибками.
Кнопки Undo/Redo работают не всегда предсказуемо.
Download