
Форматы архивации и сжатия
Сжатие (архивирование) данных
Когда для уменьшения размеров памяти, занимаемой файлами, применяются математические алгоритмы, тогда говорят, что файлы подвергнуты сжатию. На чем основано сжатие? За счет сокращения повторяющихся элементов (все методы основаны на этом). Пример: групповое кодирование. Пусть имеем последовательность байт с содержанием: <0> <0> <0> <1> <2> <2> <2> <3> <3> <3> <3> <4> После сжатия эта последовательность будет выглядеть следующим образом: <К3> <0> <К1> <1> <К3> <2> <К4> <3> <К1> <4> Все методы сжатия делятся на две категории: сжатие всего файла и сжатие, включенное в структуру файла. Сжатие всего файла: после сжатия создается новый файл, чтобы использовать данные этого файла, его нужно разжать (разархивировать). Сжатие, включенное в структуру файла: специальных процедур сжатия не выполняется, перед использованием такие файлы не нужно разжимать. Например: графические файлы. Для сжатия всего файла требуются специальные программы-архиваторы. Первая из таких программ появилась в 1985 г., это – архиватор ARC, создает файлы с расширением ARC. В 1986 г. был разработан PKARC-архиватор (PKXARC-разархиватор), он использовал все методы упаковки ARC, позднее был преобразован в PKPAK (разархиватор – PKUNPAK). Расширение создаваемых файлов – ARC. В 1989 г. создан PKZIP (PKUNZIP – разархиватор), расширение файлов – ZIP. В 1990 г. – ARJ, предлагает сразу 5 методов архивации и огромный сервис. В настоящее время широко используются WINRAR, WINZIP и WINARJ, чаще всего – WINRAR. Он позволяет: создавать RAR и ZIP-архивы, многотомные архивы, саморазворачивающиеся архивы (с расширением EXE). В целом архиваторы обеспечивают: 1. Экономию памяти (данные после сжатия – от 20% до 90% первоначального объема). 2. Хранение группы файлов под одним архивным именем (удобно – нельзя при передаче потерять один файл). 3. Обновление в архиве только нужных данных. 4. Сохранение директорий вместе с файлами. 5. Сохранение в архиве комментариев. 6. Иногда – создание саморазворачивающихся архивов, не требущих архиватора при разархивировании.
Символьное и двоичное кодирование
Строго говоря, кодирование файла с помощью символов или двоичных данных не является формой сжатия. Но так как кодирование сильно влияет на размеры растровых рисунков, я решил упомянуть о нем именно здесь.
Файлы растровой графики обычно закодированы двоичными данными. Так, при записи цвета 8-битовых пикселов программа создает графический файл, используя 8-битовый двоичный код. В случае векторных рисунков программе необходимо запомнить описания объектов, которые являются строками из букв и цифр. Для этого она обращается к стандартной таблице символов (ASCII) и запоминает их в виде чисел от 0 до 255. Когда компьютер записывает число с помощью символов ASCII, он в действительности сохраняет ASCII-коды цифр, составляющих это число. Например, для записи числа "256" компьютер сохраняет ASCII-код цифры "2" (код 50), цифры "5" (код 53) и цифры "6" (код 54). Каждый код занимает в памяти 8 бит, поэтому число "256" в кодах ASCII займет 24 бит. Если компьютер сохранит число 256 в виде числа (а не строки символов), это займет всего 8 бит. Единственный случай, когда проявляется различие в методах кодирования, — это введение внутрь векторных файлов растровых объектов. Обычно векторные файлы сохраняют растровые данные с помощью кодов символов ASCII, что занимает гораздо больше места, чем необходимо, и сильно увеличивает размер файла. Последние версии формата PostScript позволяют запоминать такие данные в виде как ASCII-кодов, так и двоичных, что дает возможность использовать для хранения растровых изображений гораздо меньше памяти, чем раньше. Некоторые программы позволяют выбрать метод кодирования для векторных файлов.
Будьте осторожны при использовании различных опций, предоставляемых программами. Экономия места в файле мало поможет вам, если позже его нельзя будет прочитать другими программами.
Групповое кодирование (сжатие методом RLE)
При групповом кодировании — одном из наиболее простых и понятных методов сжатия файлов — создающая файл программа считывает значения отдельных пикселов и запоминает их. Если программа читает подряд несколько пикселов с одинаковым значением, она не записывает цветовое значение пиксела еще раз, а просто запоминает, сколько пикселов с этим значением следуют друг за другом.
В этом методе возможны варианты. Программа при создании сжатого файла может сначала записывать количество пикселов в строке и затем их цвет, но может и наоборот. Это порождает некоторые проблемы, если программа, считывающая файл, ожидает появления данных в ином порядке, чем программа, записывавшая этот файл. Если при попытке открыть файл, использующий метод сжатия RLE, вы получаете сообщение об ошибке или полностью искаженное изображение, попробуйте открыть его с помощью другой программы или преобразуйте его в совершенно отличный формат. Групповое кодирование само по себе не является форматом файла; это всего лишь метод кодирования, который включается в некоторые графические форматы. Одни форматы (например, PCX в среде DOS) применяют метод сжатия RLE по умолчанию во всех файлах, другие предоставляют пользователю возможность выбора. Хотя метод сжатия RLE легко доступен для понимания и сравнительно просто реализуется, он не является самым эффективным для большинства растровых файлов. Метод RLE лучше всего работает с изображениями, которые содержат ограниченное количество цветов и большие области однотонной окраски, и хуже — с отсканированными или другими "фотореалистичными" рисунками, так как в них нет длинных строк одинаковых пикселов, которые можно сжать. Когда каждый пиксел изображения отличается от соседнего, метод RLE тратит на чтение и запись файлов больше времени, поскольку алгоритм сжатия применяется к каждому отдельному пикселу, что не позволяет получить заметного изменения размера файла изображения.
Сжатие методом LZW
Метод сжатия LZW (назван так по первым буквам фамилий его разработчиков: Lempel, Ziv и Welch) — гораздо более тонкая процедура, чем метод RLE. Он основан на поиске шаблонов внутри заданной структуры — в данном случае в растровом графическом изображении — и сохранении их. Программа считывает значения пикселов растрового рисунка и строит таблицу кодов, которые представляют повторяющиеся пиксельные узоры, найденные ею. Метод LZW сжимает файлы обычно до 1/3 или 1/4 их первоначального размера. Сильно насыщенные узорами изображения, содержащие большие блоки однотонной окраски или повторяющиеся цветные узоры, могут сжиматься еще больше, до 1/10 первоначального размера. С другой стороны, отсканированные фотографии или аналогичные изображения, не содержащие узоров, сжатию методом LZW поддаются плохо. Отсутствие повторяющихся значений пикселов делает процесс для таких файлов трудным и очень редко успешным (как и в случае с методом RLE).
Подобно RLE, метод LZW не является сам по себе форматом, но включен в несколько различных форматов файлов. Например, сжатие методом LZW выполняют форматы TIFF и GIF, но GIF сжимает данные всегда, a TIFF предоставляет право выбора этой возможности пользователю.
При импортировании или вводе рисунков, сжатых методом LZW, в издательских пакетах вроде PageMaker или QuarkX¬Press иногда можно заметить нежелательные черные или белые линии, пересекающие все изображение. Это происходит из-за ошибки восстановления сжатых данных. Но не надо паниковать. Откройте рисунок с помощью PaintShop Pro и сохраните его снова, но теперь без использования сжатия.
Сжатие методом JPEG
Сравнительно недавно был разработан новый формат сжатых растровых изображений, который обеспечивает гораздо более высокий коэффициент сжатия, чем другие форматы, особенно для рисунков фотографического качества. Формат этот, придуманный Объединенной группой экспертов по фотографии (Joint Photographic Experts Group), называется JPEG, а файлы этого формата в среде DOS имеют расширение .jpg. Для восстановления файлов этого формата не нужны специальные программы, но зато необходимы последние версии программ-редакторов растровой графики, которые его поддерживают, например PaintShop Pro.
Сжатие с потерями и без потерь
Метод сжатия JPEG породил новый термин компьютерной графики: потери. Сжатием без потерь считается такое, при котором не происходит утраты данных исходного изображения, и рисунок, сжатый этим методом, а затем восстановленный, в точности — пиксел к пикселу — соответствует оригиналу. С другой стороны, при сжатии с потерями происходит отбрасывание части данных исходного изображения. Метод JPEG поддерживает оба способа, причем получаемая степень сжатия может быть очень значительной (размеры файлов, сжатых методом JPEG с потерями, часто составляют меньше 5% or размеров исходных файлов).
Изображение, сжатое с потерями, не обязательно будет выглядеть хуже, чем сжатое без потерь. Формат JPEG использует тот факт, что человеческий глаз очень чувствителен к изменению яркости или интенсивности, но изменения цвета или тона он замечает хуже. Соответственно JPEG запоминает больше информации о разнице между яркостями пикселов и меньше — о разнице между их цветами. Так как вероятность заметить минимальные различия в цвете соседних пикселов мала, изображение в целом выглядит неизмененным.
Работа метода сжатия JPEG
Метод сжатия JPEG лучше всего работает с изображениями фотографического качества, тогда как для других методов больше подходят рисунки с большими областями однотонной окраски и повторяющегося узора. Повторяющиеся узоры помогают при сжатии, сохраняющем все данные исходного изображения, так как в этом случае пиксельные узоры могут быть запомнены только один раз, а затем многократно повторены при восстановлении рисунка. В свою очередь сжатие с потерями анализирует группы пикселов (например, квадраты из 9х 9 пиксел) и определяет разницу между ними; затем эта разница (а не сами пикселы) и записывается.
Сжатие с потерями приводит к тому, что резкие линии выглядят мягкими или слегка размытыми, а в областях однотонной окраски появляются переливы. Но по своей природе изображения фотографического качества не содержат резких линий или областей однотонной окраски, поэтому указанный эффект в них не заметен.