Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Т6_Графические форматы мультимедийных маркетинг...doc
Скачиваний:
22
Добавлен:
17.08.2019
Размер:
696.32 Кб
Скачать

2 Растровый формат gif

Для представления графических иллюстраций в электронных изданиях используется ряд графических форматов. В настоящее время широкое применение нашла всемирная глобальная сеть Internet (World Wide Web), в которой основными форматами графических данных являются GIF и JPEG. Начинает активно использоваться и графический формат PNG, призванный заменить формат GIF в Web-публикациях. В электронных изданиях на CD-ROM помимо хорошо сжимающих растровых форматов используются векторные и формоопределенные форматы (использующие концепцию метафайла). Данная глава посвящена наиболее популярным графическим форматам электронных изданий GIF, PNG, TIFF и JPEG.

Файловый растровый формат GIF (Graphics Image Format) был предложен фирмой CompuServe Inc. для протокола передачи цветных изображений в глобальных сетях. С его помощью организуется обмен графическими и содержащими элементы графики файлами. Этот формат используется для хранения нескольких растровых изображений в одном файле и применяется для обмена растровыми данными между платформами и системами.

Актуальность концепций, реализованных в формате GIF, с особой очевидностью проявилась в связи с расширенным использованием электронных изданий (в виде Web-страниц или Web-сайтов). Несмотря на все возрастающую пропускную способность сетевых аппаратных средств, в частности модемов, достаточно остро стоит вопрос объема графических элементов электронных изданий. С одной стороны, наглядность и эффективность электронного издания во многом зависят от качества графических элементов, в первую очередь от разрешения и глубины цвета пикселов изображения. Поэтому понятно стремление разработчиков электронных публикаций использовать многокрасочные графические изображения.

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

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

Поэтому формат GIF, главным достоинством которого является минимальный размер файлов, до сих пор сохраняет свое значение основного графического формата World Wide Web.

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

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

GIF в отличие от многих растровых форматов для хранения использует блоки данных и дополнительную протокольную информацию. Блоки данных содержат подблоки и информационные поля. Каждый подблок данных начинается с однобайтового счетчика, который, принимая значения в диапазоне от 1 до 255, указывает количество байтов данных, следующих за байтом счетчика. Подблоки могут объединяться в непрерывные группы (байт счетчика, байты данных, байт счетчика, байты данных и т.д.). Последовательность из одного или нескольких подблоков данных завершается байтом счетчика, имеющим значение 0.

Формат GIF позволяет хранить растровые данные в пикселах с глубиной цвета от 1 до 8 бит. Изображения записываются с применением цветовой модели RGB и данных палитры. Формат позволяет хранить изображения размером до 64000 пикселов, выбирать 256 цветов в 64-миллионной палитре, обеспечивает быструю распаковку при просмотре, эффективное сжатие и аппаратную независимость. Формат позволяет хранить в одном файле несколько изображений, но эта возможность, как правило, используется при кодировании анимаций.

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

GIF87a предусматривает следующие возможности GIF-файла:

  1. Чередование (interlacing). Вначале загружается только «остов» изображения, потом, по мере загрузки, оно детализируется. Это позволяет на медленных линиях не грузить весь графический файл целиком для того, чтобы получить о нем представление.

  2. Сжатие (compression) по алгоритму LZW, что обеспечивает наименьший объем файла.

  3. Размещение нескольких изображений в одном файле.

  4. Расположение изображения на логическом экране. То есть формат позволяет определить логическую экранную область для вывода изображений и помещать их в произвольном месте этой области.

В дальнейшем этот стандарт был расширен спецификацией GIF89a, которая добавила следующие возможности:

  1. Включение в графический файл комментариев (не отображаются на экране, но могут быть прочитаны программой, поддерживающей GIF89a).

  2. Управление задержкой перед сменой кадров (задается в 1/100 с или ожидание ввода пользователя).

  3. Управление удалением предыдущего изображения. Предыдущее изображение может быть оставлено, заменено на цвет фона или на то, что было перед ним.

  4. Определение прозрачного цвета.

  5. Вывод текста.

  6. Создание управляющих блоков прикладными программами (application-specific extensions). Внутри GIF-файла можно создать блок, который будет игнорироваться всеми программами, кроме той, для которой он предназначен.

Спецификация GIF87а

Это первоначальная версия формата GIF, которая была выпущена в мае 1987 г. Она читается большинством программных приложений, поддерживающих формат GIF.

Основные элементы структуры файла GIF87а представлены на рис. 4.1.

Каждый файл начинается с Заголовка (Идентификатора) и Дескриптора логического экрана, после которых может следовать Глобальная цветовая таблица. Каждый из этих разделов имеет постоянное смещение от начала файла. Любое изображение, записанное в файле, содержит собственный Локальный дескриптор изображения, Локальную цветовую таблицу (необязательную) и блок данных изображения. Последним полем в формате GIF является символ Завершитель, который указывает конец данных GIF.

Заголовок имеет длину 6 байт и применяется для идентификации файла GIF. Заголовок включает Сигнатуру заголовка (Signature) и Версию формата (Version) GIF.

Поле Signature имеет длину 3 байт и содержит в качестве идентификатора обязательные символы «GIF». Ни один из файлов не будет распознан приложением как файл изображения GIF, если он не начинается с этих трех байтов.

Поле Version также имеет длину 3 байт и указывает версию файла GIF (87a или 89а).

Дескриптор логического экрана (рис. 4.2) включает данные о ширине и высоте отображаемого экрана в пикселах, информацию об экране и цветовой таблице, индекс цвета фона и коэффициент сжатия пикселов.

Поля Ширина и Высота (1-4 байт) определяют минимальное разрешение экрана, требуемое для воспроизведения изображения. Если устройство отображения не способно поддерживать указанное разрешение, то для правильного воспроизведения изображение следует масштабировать. Значение «pixel» также определяет число цветов в изображении. Диапазон значений 'pixel' составляет от 0 до 7, что соответствует 1-8 бит. Это транслируется в диапазон от 2 (черно-белые изображения) до 256 цветов. Бит 3 в байте 5 зарезервирован для будущих определений и должен быть нулевым.

Глобальная цветовая таблица. Эта таблица является необязательной и рекомендуется для изображений, где требуется точная передача цветов. На существование этой таблицы указывает поле M в байте 5 дескриптора экрана. Обычно глобальная таблица использутся из-за ограничений, существующих в настоящее время в доступном оборудовании. Флаг M в дескрипторе конкретного изображения обычно равен 0. Если глобальная таблица цветов присутствует, ее определение следует непосредственно за дескриптором экрана. Каждый элемент цветовой таблицы состоит из трех байтов, значения которых описывают соответственно относительную интенсивность красного, зеленого и синего цветов для каждого пиксела изображения. Структура блока цветовой таблицы представлена на рис. 4.3.

Получаемое значение кода цвета каждого пиксела при высвечивании изображения будет соответствовать ближайшему доступному цвету из цветовой таблицы дисплея. Цветовые компоненты представляют собой значения относительной интенсивности от нулевой (0) до полной (255). Белый цвет может быть представлен как (255, 255, 255), черный как (0,0,0) и желтый как (180, 180,0). При высвечивании на дисплеях, которые поддерживают менее 8 бит на цветовой компонент, используются старшие биты. При создании элементов цветовой таблицы GIF на аппаратуре, поддерживающей менее 8 бит на компонент, значение аппаратного компонента рекомендуется конвертировать в 8-битовый формат с помощью следующего соотношения:

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

Данные изображения. За Заголовком, Дескриптором логического экрана и данными Глобальной цветовой таблицы следуют один или несколько разделов данных изображения. Каждое изображение в файле GIF записывается отдельно, со своими Дескриптором изображения и Локальной цветовой таблицей.

Локальный дескриптор изображения размещен перед соответствующим разделом данных по конкретному изображению. Каждый дескриптор изображения начинается с символа-разделителя изображений. Роль разделителя изображений состоит в синхронизации при входе в дескриптор изображения. Это целесообразно, если GIF-файл включает более одного изображения. Этот символ определен как шестнадцатеричный код запятой («,»). Как только этот символ встречается между данными об изображениях, непосредственно за ним следует дескриптор изображения. Любой символ между концом предыдущего изображения и символом-разделителем изображения игнорируется. По мнению разработчиков, это позволит при последующих модификациях GIF допускать присутствие нескольких форматов и правильно игнорировать их старыми декодерами.

Локальный дескриптор изображения включает следующие компоненты:

  • идентификатор дескриптора изображения;

  • положение изображения на экране по оси Х;

  • положение изображения на экране по оси Y;

  • ширину изображения в пикселах;

  • высоту изображения в пикселах;

  • информацию об изображении и данных цветовой таблицы.

В разделе информации об изображении определяются флаги, указывающие на присутствие локальной таблицы для поиска цветов и определения последовательности высвечивания пикселов: флаг локальной цветовой таблицы (бит 0), флаг чередования (бит 1), флаг сортировки (бит 2), размер элемента локальной цветовой таблицы (биты 5 - 7). Биты 3 - 4 зарезервированы.

Значение флага локальной цветовой таблицы равно 1, если для данного изображения существует локальная цветовая таблица. Если значение этого флага равно 0, то локальная цветовая таблица отсутствует и вместо нее следует использовать глобальную цветовую таблицу.

Значбние флага чередования равно 1, если строки изображения чередуются, и 0 в противном случае. Данные изображения GIF хранятся в виде строк развертки и попиксельно. Строки развертки, из которых состоит изображение, обычно хранятся в определенной последовательности - с первой по последнюю. Формат GIF поддерживает и альтернативный способ хранения строк растровых данных - в порядке чередования.

На рис. 4.4 представлен порядок строк, записанных обычным способом и по принципу чередования.

В первом случае строки растровых данных последовательно записываются начиная с первой и до последней. Это типичный способ хранения данных для большинства растровых файлов. В режиме чередования строки развертки представляются в следующем порядке: сначала записываются все четные строки, а затем все нечетные.

GIF использует четырехпроходную схему чередования. Первый проход начинается со строки 0, затем читается восьмая строка растровых данных. Второй проход начинается с четвертой строки, затем вновь читается восьмая строка данных. Третий проход начинается со второй строки, затем читается четвертая. Последний проход начинается с первой и читается вторая. По этой схеме обрабатываются все строки изображения.

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

Значение флага сортировки определяет, отсортированы ли элементы в цветовой таблице по степени их важности. Определяется это частотой появления цвета в изображении. Значение 1 указывает на отсортированную цветовую таблицу, значение 0 - на таблицу с неотсортированными цветовыми элементами. Субполе Флаг сортировки имеет корректное значение только в версии GIF89a; в версии 87а оно зарезервировано и всегда установлено в 0.

Значение размер элемента локальной цветовой таблицы указывает количество битов на элемент локальной цветовой таблицы.

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

Каждый подблок данных начинается со счетчика байтов. Значение счетчика может изменяться в диапазоне от 1 до 255, определяя количество байтов данных в этом подблоке. Данные подблока следуют непосредственно за счетчиком байтов. Непрерывная группа подблоков данных завершается байтом с нулевым значением. Этот байт может рассматриваться либо как символ-ограничитель, либо как подблок со значением счетчика, равным 0. В обоих случаях он указывает на то, что данных больше нет.

Файлы GIF не содержат непрерывного потока закодированных LWZ-данных. Эти данные посылаются декодеру по мере чтения подблоков. Большинство подблоков, в которых хранятся данные изображения, имеют длину 255 байт. Следовательно, именно этот размер лучше всего подходит для буфера, в котором хранятся закодированные данные изображения.

Декодированные данные изображения GIF отличаются довольно простым форматом. Каждый пиксел в декодированной строке развертки всегда имеет размер 1 байт и содержит значение индекса из глобальной либо локальной цветовой таблицы. Структура файла формата GIF допускает хранение цветовой информации непосредственно в данных изображения, но в спецификации GIF подобная возможность не предусмотрена. Поэтому даже однобитовые изображения должны использовать 8-битовое значение индекса и цветовую таблицу из двух элементов.

Терминатор GIF. Для фиксации процесса окончания файла изображения GIF используется один байт данных, который рассматривается как последний символ файла. Значение этого байта всегда равно 3Bh (шестнадцатеричный код символа «;»). Терминатор (или завершитель) воспринимается декодером GIF как сигнал окончания процесса обработки изображения. Он должен присутствовать в каждом файле GIF.

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

Обычно декодирующая программа дает команду на прекращение графического режима и возвращается к предыдущему процессу.

Расширенный блок GIF. Для того чтобы обеспечить расширение определения GIF, необходим механизм для определения метода упаковки внутри потока данных GIF. Такое расширение было определено и документировано CompuServe для того, чтобы предусмотреть управляемый способ усовершенствований формата. Расширенный блок GIF пакуется способом, похожим на тот, который использовался для растровых данных, но не сжимается. Основная структура блока приведена на рис. 4.5.

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

Формат GIF89a

В дальнейшем стандарт GIF был расширен спецификацией GIF89a, которая добавила формату указанные выше функциональные возможности.

Структура файла GIF89a. Файл GIF89a состоит из блоков, расположенных в определенной последовательности. Выделяют блоки трех типов:

  1. Управляющие блоки: заголовок, описание логического экрана, управление графическими расширениями, признак конца - определяют, как будут обрабатываться изображения.

  2. Блоки изображения: изображение, текст, описание палитры - содержат данные для самого изображения.

  3. Специальные блоки: комментарии, прикладные расширения - не влияют на изображение, но обрабатываются прикладными программами. Среди подобных блоков следует выделить прикладной блок Netscape Loop, который присутствует практически в каждой анимации и определяет число циклов повторения.

Общая схема следования этих блоков:

  1. Заголовок (идентификатор) - определяет формат файла (GIF87a или GIF89a).

  2. Описание логического экрана (задается размер поля экрана, в котором отображается данный файл).

  3. Описание глобальной палитры (необязательно).

  4. Произвольное количество блоков изображений (в том числе текстовых) или пар блоков «управление графическими расширениями - изображение». Блок управления графическим расширением может содержать в себе указание на локальную палитру, расположение на логическом экране, задержку и способ удаления изображения и оказывает влияние только на следующий непосредственно за ним блок изображения.

  5. Признак конца файла.

  6. Комментарии и специальные блоки не могут располагаться:

  • до описания глобальной палитры (если оно есть) или до описания логического экрана;

  • между блоком управления и соответствующим ему блоком изображения;

  • после признака конца файла.

GIF не единственный формат, позволяющий кодировать и сжимать растровую графику. Определенные способности к сжатию есть у форматов BMP, PCX и многих других. Однако GIF - один из немногих форматов, использующих алгоритм сжатия, почти не уступающий по эффективности программам-архиваторам.

Резервы экономии в GIF не исчерпываются одной лишь компрессией данных. Одним из главных достоинств этого формата является то, что он позволяет произвольно задавать количество цветов, или размер палитры, используемой в изображении. Другие форматы, как правило, имеют лишь стандартные градации глубины цвета: 2, 16, а потом сразу 256, 215 (режим «high color») и 224 (режим «true color»). GIF же может иметь любое количество цветов от 2 до 256, и если в изображении используется, скажем, 64 цвета (26), то для хранения каждого пиксела будет использовано ровно 6 бит.

Иногда описанная выше редукция палитры обходится вообще без потерь качества, так как исходное изображение уже содержало меньше 256 цветов. Но в современных документах иногда требуется более представительная палитра цветов. В этом случае приходится аппроксимировать исходное изображение цветами усеченной палитры. Обычно используется метод аппроксимации, получивший название диффузия (diffusion или dithering). При этом области, которые в оригинале были залиты однородным цветом, после преобразования заполняются смесью пикселов разных цветов, разбросанных по случайному закону. Как правило, каждый отсутствующий в редуцированной палитре цвет передается пикселами двух самых близких к нему цветов новой палитры. В результате изображение приобретает характерную зернистую, шершавую фактуру. Очень часто диффузия является единственным способом, позволяющим хоть сколько-нибудь адекватно передать исходные цвета с помощью палитры, на которой этих цветов нет.

Нечто подобное используется в телевидении для передачи одного полного кадра за два прохода луча (так называемая «чересстрочная развертка»). Поэтому такие изображения были названы чересстрочными (interlaced).

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

Возможность записи чересстрочных файлов была введена во второй версии формата GIF (GIF89a), опубликованной в 1989 г. В этой же версии появились и другие важные усовершенствования, а именно: возможность указывать прозрачный цвет и записывать в один файл несколько самостоятельных картинок-кадров движущегося мультипликационного изображения.

К недостаткам рассматриваемого формата обычно относят ограниченное число используемых цветов (до 256) и необходимость заключения лицензионного соглашения с разработчиками формата.