Издательский дом ООО "Гейм Лэнд"СПЕЦВЫПУСК ЖУРНАЛА ХАКЕР #50, ЯНВАРЬ 2005 г.

Сжатие без проблем

Дмитрий Андрианов

Спецвыпуск: Хакер, номер #050, стр. 050-102-1


aka modifikator (www.modifikator.net), креативный дизайнер и фотограф

С потерей качества и без нее

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

Дизайнер, работая над проектом, хранит в своей рабочей папке до 500 Мб различных файлов - от фотографий и до версий эскизов разрабатываемого проекта. Верстальщикам глянцевых журналов приходится работать с еще большим объемом графической информации. В среднестатистическом глянцевом журнале порядка 96 полос, и практически на каждой странице размещаются фотографии или другие иллюстрации. Таким образом, общий объем графической информации, с которой работают при верстке, увеличивается до нескольких гигабайт. О фотографах, работающих в рекламных агентствах, страшно даже подумать. Чтобы сохранить одну фотографию в таком качестве, которое было бы приемлемым для дальнейшего использования в полиграфии, потребуется не менее 30 Мб. А таких фотографий не одна и не две, их целый архив, который создавался в течение не одного года. Вот и задумываешься после этого о том, на чем все это хранить и как уменьшить объем архива, чтобы тот занимал поменьше места на и без того забитом до краев винчестере. По этим причинам и были изобретено множество методов сжатия самых разных данных, в том числе графических.

Архивация и компрессия

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

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

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

Рассмотрим несколько алгоритмов сжатия данных, которые не вносят изменений в исходные файлы и гарантируют полное восстановление данных.

RLE (Run length encoding)

Метод сжатия данных, при котором одинаковые последовательности одних и тех же байтов заменяются однократным упоминанием повторяющегося байта (или целой цепочки байтов) и числа его повторений в исходных данных. Например, строка типа 0100 0100 0100 0100 0100 0100 0100 0100, описывающая некую группу пикселей, будет заменена на запись типа 0100 х 8 и т.п. Применяется этот тип сжатия в тех случаях, когда изображение имеет большие участки одного цвета, цифровое представление которых идентично. В основном этот тип сжатия применим для монохромных изображений с небольшим количеством цветов: для деловой и научной графики, в которых сжатием данных можно добиться наилучших результатов. Алгоритм применим для сжатия других типов данных (в том числе и не графических), но малоэффективен, так как сжимаемые данные должны иметь простую повторяющуюся структуру. Этот алгоритм имеет еще одно важное преимущество - он относительно прост и позволяет быстро производить распаковку из этого формата и упаковку обратно (все графические данные для их обработки должны быть предварительно распакованы, а любая компрессия или архивация применяется в основном для временного или постоянного хранения файла). В принципе, на основе этого несложного алгоритма работают более совершенные и более сложные (а также менее быстрые) методы сжатия графических данных (я рассмотрю их ниже). Этот метод используется для файлов формата PSD, BMP и других.

Содержание  Вперед на стр. 050-102-2