IZONE- http://www.izcity.com/- бесплатный софт, вэб-сервисы, ресурсы для раскрутки, свежие номера журнала "Internet Zone".

Графика в стиле GIF

Сергей Болашов

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

И несмотря на то, что уже давно существуют намного более гибкие и функциональные форматы, он не собирается уступать «пальму первенства». Объяснить причины его высокой популярности не составит никакого труда: при всей простоте реализации GIF сочетает в себе набор таких функциональных возможностей, переоценить которые в плане сетевого обмена информацией очень и очень трудно. Ну и, кроме того, не зря же говорят: старый друг — лучше новых двух.

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

Истоки

Лет 15 назад было несколько крупных коммерческих on-line сетей, предоставлявших своим пользователям множество различных сервисов. В числе прочих ресурсов крупнейшей американской сети, принадлежавшей фирме CompuServe, была и громадная библиотека разнообразных изображений, открытая для публичного доступа (клиентам CompuServe, разумеется), и привлекавшая к себе большое количество пользователей. Читателей наверняка заинтересует, что же так привлекало пользователей к этой «свалке» картинок и фотографий?

В этом явлении нет ни капли загадочности или сверхъестественности — это была обыкновенная «клубничка», развязные изображения полуголых, голых, и «»совсем голых» девиц и особей противоположного пола. И хотя качество этих рисунков сравнимо скорее с фотографией из дешевой пятнадцатикопеечной газеты (для примера на рис. 1 представлен типичный образец компьютерной графики того времени, правда, с намного более «мягким» содержанием), чем даже с сильно компрессированным JPEG’ом наших дней, пользователи сети CompuServe посещали библиотеку изображений с завидным упорством и регулярностью. Но время, проведенное в сети, было далеко не бесплатно, и поэтому все графические файлы, находящиеся в этом «скопище», были сжаты архиватором; и каждый раз, перед тем как просмотреть новые рисунки, их приходилось распаковывать, что, естественно, положительных эмоций ни у кого не вызывало. Ситуацию мог поправить только принципиально новый графический формат, реализующий эффективную схему сжатия.

Рис. 1Программисты из CompuServe трудились вовсю, и в мае 1987 года была представлена первая спецификация под названием Graphics Interchange Format (формат для обмена графической информацией), которая впоследствии была названа GIF87a. Новый формат использовал «настоящий» алгоритм сжатия LZW, поддерживал 256-цветную графику и не был привязан ни к какой определенной платформе. А самое главное, это был формат, спроектированный для межсетевого взаимодействия, и наконец-то стала доступной возможность плавного появления изображения на экране по мере его загрузки из сети! Метод LZW позволял преобразовать цепочки повторяющихся байтов в специальные кодовые слова и таким образом уменьшить размер 8-битовых данных, полученных «естественным» путем (фотографии, сканированные рисунки) на 40% и более.

Новинку оценили по достоинству — вскоре было очень нелегко найти не только приложение, обрабатывающее графические файлы и не поддерживающие GIF, но и изображения, не закодированные при помощи нового формата. Количество GIF-программ росло, как грибы в дождливую погоду, а пользователи сетей (сначала CompuServe, а затем и других — America Online, Prodigy) были столь довольны, что уже в 1989, то есть через два года, программисты CompuServe предприняли попытку усовершенствования формата. Он был основательно доработан, и позволял теперь создавать «прозрачные» изображения и простенькие мультяшки. Добавилась поддержка несложных анимационных последовательностей, появилась возможность хранения прозрачных областей изображения. И хотя в то время такие нововведения были поистине революционными, широкое распространение новая версия формата, именующаяся GIF89a, получила только в период бурного развития Интернета.

В 1993 году фирма Unisys, обладавшая патентом на алгоритм сжатия LZW, обратилась к руководству CompuServe с предложением заключить лицензионное соглашение, и начать отчисления авторских гонораров (royalty). И хотя шаг этот был весьма логичен — ничем до сих пор не примечательный формат, популярный разве что у относительно небольшого количества художников и программистов, прямо на глазах превращался в неисчерпаемую «золотую жилу» — он не вызвал ничего, кроме гневных упреков и возмущений как со стороны пользователей CompuServe, так и весьма небольшой, но уже хорошо сплоченной интернет-общественности. Тогда против разработчика GIF’а был инициирован судебный процесс, в конце концов, все же проигранный им.

28 декабря 1994 года (а по некоторым источникам — 22 декабря) было заключено лицензионное соглашение, которое обязывало всех разработчиков, использующих в своем ПО GIF, выплачивать фирме Unisys авторские отчисления с каждого экземпляра проданного продукта. Кстати, это соглашение действительно и по сей день. Так ошибка программистов, которые в обязательном порядке должны были проверить патентную чистоту своих решений, но не сделали этого, чуть было не стала причиной гибели этого удивительного стандарта. К счастью, этого не случилось, даже наоборот, данная ошибка послужила толчком для создания нового, качественного, функционального и совершенного свободного графического формата — PNG. Но несмотря ни на отличную документированность, ни на ряд несомненных достоинств, ни даже на его полную свободу от каких-либо отчислений, PNG до сих пор так и не удалось получить такое же широкое распространение и признание, как бессменному и всегда популярному GIF’у.

О том, что внутри

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

Кроме собственно данных изображения в файле хранится много другой информации, взгляните на его структуру (рис. 2). Как и любой другой файл, в котором находятся данные (не обязательно графические), он начинается с заголовка. Заголовок в формате GIF очень компактен и занимает всего 6 байт. Единственное его предназначение — указать программе тип файла, а также его версию. Кстати, если у вас возникнет необходимость самостоятельно проверить версию или формат файла, имеющего расширение GIF, то сделать это очень просто. Необходимо только открыть его любым текстовым редактором, и в начале документа вы увидите GIF87a или GIF89a.

Рис. 2

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

В каждом отдельном кадре может быть использовано не более 256 различных цветов. Количество кадров также ограничено, но это связано уже не с особенностями формата, а с возможностями файловой системы (ФС) той или иной ОС. К примеру, в среде Windows 9x OSR2 и выше, где используется 32-разрядная ФС, максимальный размер файла составляет 4 Гб, и чтобы преодолеть этот рубеж, необходимо использовать другие ОС, например, BeOS. Но создание громадных GIF-роликов с трехчасовым видеофильмом или любимым телесериалом лишено всякого смысла — для этого существует множество других, более подходящих форматов, таких как QuickTime, MPEG или Intel DVI.

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

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

(Продолжение следует)

Источник: http://www.mycomp.com.ua/

 


Copyright © "Internet Zone", http://www.izcity.com/, info@izcity.com