Онлайн учебники на TEPKA.ru

Учебник по HTML 4

       

Формат GIF

Формат файла GIF (Graphics Interchange Format) первоначально был предложен корпорацией CompuServe Incorporated для передачи графических данных по сети. Из-за популярности сети CompuServe формат GIF получил широкое распространение и в настоящее время поддерживается множеством программ работы с графикой, а также реализован на ряде платформ. Популярность формата увеличивается за счет свободного распространения его спецификации и свободного использования. Поскольку изначально формат разрабатывался для передачи данных в потоке, а не как формат для хранения данных в файле, то его последовательная организация как нельзя более подходит для размещения графических изображений на WWW-серверах.

К положительным качествам формата можно отнести возможность хранения множественных изображений, внесение перекрывающего текста, отображение ряда изображений с задержкой, задание режимов восстановления предыдущего изображения, введение данных для специфических приложений. К недостаткам следует отнести ограниченное количество цветов (не более 256), реализованных в виде палитры 24-битовых цветов, отсутствие возможностей по хранению градаций серого и данных цветовой коррекции, хранению данных в моделях, отличных от RGB (например, CMYK или HSI). Хотя 256 цветов во многих случаях оказывается достаточно, сохранение фотореалистичных изображений в этом формате может привести к ухудшению цветовой гаммы картинки.

В настоящее время используются две модификации GIF-файлов, которые носят название GIF87a и GIF89a. Последняя модификация является расширением GIF87a. Официальная документация по GIF89a датирована 31 июля 1990 года.

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

Уже в 1987 году в модификации GIF87a были определены следующие возможности:

  • наличие нескольких различных изображений, закодированных в одном файле (далее будем называть отдельное изображение, входящее в состав данного файла, кадром);

  • позиционирование изображения на логической области экрана;

  • хранение изображения с чередованием строк (interlacing).

Это означает, что уже более десяти лет назад была потенциальная возможность создавать простейшие анимации, собирая последовательность кадров в одном GIF-файле, однако широкое распространение "анимированных" (animated GIF) файлов произошло только в последние годы, главным образом, за счет широкого использования на Web-страницах. В GIF-файле определены два различных варианта хранения данных. В одном из них все строки изображения записываются подряд от начальной до конечной (построчное хранение — Noninterlaced). В другом варианте строки сохраняются в определенном порядке (хранение с чередованием строк — Interlaced). Для последнего варианта порядок хранения строго определен, а именно, строки изображения с чередованием размещаются в четыре прохода:

  • каждая 8-я строка, начиная с 0-й;
  • каждая 8-я строка, начиная с 4-й;
  • каждая 4-я строка, начиная с 2-й;
  • каждая 2-я строка, начиная с 1-й.

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

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

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

Покажем пример отображения файла формата GIF, загрузка которого была прервана после первого прохода (рис. 3.12). Размер изображения составляет 570x495 (256 оттенков серого), файл имеет размер 243 Кб. Для получения данных первого прохода потребовалось загрузить 32 Кб, что и составляет примерно 1/8 от размеров всего файла.

Примечание

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

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

быстро сформировать контуры изображения, что хорошо видно на рис. 3.12. При получении очередных данных пикселы отдельных строчек будут изменять свой цвет, давая эффект проявления изображения. Для сравнения качества приведем оригинальное изображение (рис. 3.13).

Формат GIF

Рис. 3.12. Отображение чересстрочного GIF-файла, полученное после первого прохода

Формат GIF

Рис. 3.13. Оригинальное изображение

Примечание

Для неискушенных читателей заметим, что термины Interlaced и Noninterlaced (NI) часто встречаются при описании режимов работы мониторов. Хотя на первый взгляд речь идет о схожих вещах, а именно о порядке заполнения строк экрана, однако применительно к мониторам эти термины отражают технический аспект работы развертки кадра монитора, что никак не влияет на работу программ в общем, и метод выдачи строк изображения формата GIF, в частности.

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

  • время (в сотых долях секунды), по истечении которого начнется выдача следующего кадра;

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

  • определение прозрачного цвета;

  • включение комментариев, которые не отражаются при выводе изображений;

  • включение строк текста;

  • определение режима восстановления области экрана, занятой изображением, после завершения отображения данного кадра;

  • задание внутри файла данных, специфичных для отдельного приложения.

Примечание

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

Рассмотрим кратко перечисленные возможности.

Время задержки определяет промежуток между окончанием выдачи текущего кадра и началом выдачи следующего. Точнее, перед началом выдачи следующего кадра выполняется восстановление области экрана, занятого изображением, в соответствии с заданным режимом.

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

Один из цветов палитры изображения может быть определен как прозрачный (transparent). Это указывает браузеру, что при выводе изображения те пикселы, цвет которых объявлен прозрачным, не требуется изменять на экране. Чаще всего в качестве прозрачного цвета задается цвет фона изображения.

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

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

Режим восстановления области экрана задает способ, которым будет обрабатываться фрагмент графики после его отображения. Определены следующие способы:

  • не делать ничего;

  • оставить как есть, что в большинстве случаев то же самое, что ничего не делать;

  • восстановить предыдущее состояние, т. е. заполнить фрагмент экрана тем изображением, которое было до вывода текущего изображения;

  • заполнить цветом подложки (фоновым цветом или изображением).

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

Задание внутри GIF-файла данных, специфичных для отдельного приложения, позволяет практически неограниченно расширять возможности работы с этими файлами. В одном GIF-файле может быть несколько разных блоков, каждый из которых определяет данные для конкретного приложения и не используется другими. Netscape использует такой блок для задания параметров цикла смены изображений. Внутри блока записывается единственный параметр, представляющий собой число от 0 до 32760, который означает количество полных циклов смены кадров, выполняемых при отображении. Число нуль означает бесконечный цикл. Отсутствие этого блока приводит к одноразовой выдаче всех кадров файла с соответствующими временными задержками. Версия Netscape 2.0 при любом числовом значении давала бесконечный цикл. Начиная с версии 3.0, браузер Netscape выполняет заданное число циклов. Внутри блоков, специфичных для приложения, имеется 8-байтовое поле идентификатора приложения и 3-байтовое поле кода приложения. Для блоков задания цикла в качестве идентификатора используется слово "NETSCAPE", а в качестве кода приложения "2.0". Это можно обнаружить, "заглянув" внутрь любого GIF-файла с циклом.

Примечание

Версия Netscape 2.0 на сегодняшний день представляется архаичной. Однако это вовсе не означает, что следует менять значение поля кода приложения. Это значение указывает на номер версии, начиная с которой обеспечивается распознавание такого блока браузером Netscape. Заметим, что данный блок распознается также и браузером Internet Explorer.

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

  • если файл слишком велик для размещения в кэше, то цикл выполняться не будет, чтобы не загружать сеть повторными считываниями;

  • в процессе выполнения цикла смены кадров изображения из кэша логотип Netscape в правом верхнем углу браузера не показывает падающих звезд, как это происходит в случае получения данных из сети;

  • кнопка Stop панели навигации браузера горит во время выполнения замены кадров. Просмотр анимации может быть остановлен нажатием кнопки Stop или Esc. Остановка может произойти на любом кадре из никла. Возобновление цикла возможно при просмотре изображения отдельно от всего документа (View Image) или при перезагрузке (Reload) документа, но не при обновлении экрана (Refresh).

 

 

 

Top.Mail.Ru
Top.Mail.Ru