Форматы графических файлов
Регистрационная метка
Читальный зал Роботландии
Сохранить картинку с экрана можно в файле, используя графические форматы BMP, GIF, JPEG и другие.
 

Консервирование картинок

— С одной стороны, компьютерная картинка — это “игра” света на экране, а с другой — набор битов в видеопамяти компьютера. Выключили компьютер, и картинка на экране пропала — монитора свет недолговечен! А вот биты можно записать на диск и “законсервировать” картинку на долгое время!

Так рассуждал Вася, сохраняя на диск очередной “шедевр” из редактора Paint.

— Мне кажется, — заметил Шурик, — настало время поговорить о форматах графических файлов.

— Согласен! — поддержал Петя. — А то Вася неразумно тратит дисковое пространство, сохраняя картинки в “толстом” формате BMP.

— Ребята! — взмолился Вася. — Давайте по порядку! А то от ваших умных разговоров мои графические “консервы” прокиснут и взлетят на воздух!

Формат BMP

— Давайте нарисуем в Paint маленький флаг России, — предложил Шурик, — и посмотрим на пикселы рисунка в увеличенном виде:

— Ты нарисовал картинку шириной в 10, а высотой в 12 пикселов, — отметил Вася.

— Картинка на экране — это таблица пикселов. — уточнил Петя. Нарисованный флажок образует таблицу из 12 строк и 10 столбцов.

— Верно! Картинка на экране — это таблица, — подтвердил Шурик, — а память компьютера — это цепочка битов, то есть список. Возникает вопрос: как отобразить картинку-таблицу на память-список?

— Взять ножик, — пошутил Вася, — и нарезать таблицу на строки!

— Так и поступают! — обрадовался Шурик. — В памяти компьютера картинка хранится как последовательность табличных строк:

Мы рисовали картинку на мониторе, у которого установлен 24-битный режим цветности. Это означает, что каждая RGB-компонента задается 8 битами (одним байтом), имеет 256 значений интенсивности, которые кодируются числами от 0 до 255:

Конечно, в память записывается не условная десятичная запись, изображённая выше, а двоичные нули и единицы, в соответствии с RGB-кодом четырёх цветов нашего флажка:

— Получается, — заметил Петя, — что картинка состоит из 12 · 10 = 120 пикселов. Для ее хранения в памяти потребуется 120 · 3 = 360 байт.

— Все это, конечно, интересно и поучительно, — высказал свое мнение Вася, — но мы хотели рассмотреть способы хранения картинок на диске, а не в памяти компьютера!

— Сюрприз! — с улыбкой до ушей подпрыгнул на стуле Шурик. — Считай, что один способ хранения картинок на диске (или, как говорят, формат графического файла) мы уже изучили! Это графические файлы с расширением bmp, в которые ты пишешь свои картинки из Paint. В формате BMP (от Bit MaP — двоичная карта) картинки сохраняются почти так, как они записаны в памяти компьютера, только перед кодом изображения в файле размещается служебная информация (заголовок):

— А что содержится в заголовке?

— Первые два байта заголовка содержат буквы “BM” — признак BMP-формата, затем в 4 байтах записано число — размер файла. Кроме этого, заголовок содержит ширину и высоту картинки в пикселах, цветность (число битов на пиксел), разрешение экрана и некоторую другую информацию.

Формат GIF

— С форматом BMP, кажется, всё ясно… А существуют ли другие форматы хранения графики в файлах?

— О, да! И очень много. В Интернете очень популярен формат GIF (Graphic Interchange Format, формат обмена графическими данными). Вот как он устроен:

Заголовок начинается с текста “GIF89a” — признака GIF-формата, затем указывается ширина, высота картинки и некоторая другая информация.

За заголовком следует палитра — 24-битные коды цветов, которые используются в рисунке. Для нашего флажка будет построена такая палитра:

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

Флажок будет закодирован следующим образом:

Конечно, в файле эта таблица превращается в список двухбитных кодов. При этом первые 20 бит кодируют первую строку изображения, вторые 20 — вторую и так далее.

— Будет забавно подсчитать длину полученного GIF-файла в байтах — предложил Петя.

Вася быстро выполнил вычисления.

— Получается 10 · 12 · 2 = 240 бит = 30 байт. Плюс еще 12 байт палитры. Итого — 42 байта без заголовка против 360 байт того же флажка в формате BMP! Выигрыш по памяти более чем в 8 раз! Теперь я понимаю твои слова про “толстый” формат BMP!

— А вот как кодируется в формате GIF чёрно-белый флажок:

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

Вася опять занялся вычислениями.

— Получается, что код чёрно-белого флажка в GIF-файле имеет размер 120 бит или 15 байт. Вместе с палитрой это — 21 байт.

— А в формате BMP чёрно-белый флажок будет занимать по-прежнему 360 байт — вставил свое слово Петя.

— Значит, объем GIF-файла зависит от числа цветов, используемых в картинке?

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

Пусть все пикселы картинки, ширина которой 10, а высота 12, окрашены в разные цвета. Вопрос: сколько бит потребуется для кодирования одного пиксела такой картинки в формате GIF?

— В картинке 10 · 12 = 120 пикселов, а, значит, и цветов. Из приведенной выше таблицы следует, что каждый пиксел будет кодироваться 7 битами. При этом код картинки в этом формате займет 120 · 7 = 840 бит или 105 байт. Плюс 128 · 3 = 384 байта для палитры (размер для палитры резервируется по максимальному значению цветового диапазона). Получается 105 + 384 = 489 байт. Это больше размера BMP для этой картинки на 129 байт.

— Да, в этом “тяжёлом” случае, когда все пикселы разного цвета, формат GIF проигрывает. Но иллюстрации, в которых все точки разноцветные, встречаются редко, поэтому на практике файл в формате GIF намного короче аналогичного файла в формате BMP.

— А если в картинке использовано более 256 цветов, то её нельзя сохранить в формате GIF?

— Редакторы (в том числе и Paint) охотно это делают.

— Ты же говорил, что в формате GIF сохраняется не более 256 цветов?

— Графический редактор перед записью картинки в файл заменяет в ней “лишние” цвета близкими из 256-цветной палитры. Картинка, конечно, записывается с искажением.

При использовании GIF с 256-цветной палитрой ухудшение качества часто практически незаметно:

Для этой картинки качество остается приемлемым и при GIF с палитрой в 32 цвета, и даже при 16 цветах:

Когда число цветов уменьшается до 4 или 2, качество изображения становится слишком низким:

— Как в редакторе Paint записать картинку в формате GIF?

— Работаем, как обычно, с меню Файл/Сохранить как. В выпадающем списке Тип файла устанавливаем строку “Формат GIF (*.gif)”:

— Paint сам определит, сколько цветов ему использовать для GIF-палитры?

— Этот редактор использует алгоритм определения “оптимального” числа цветов для файла в формате GIF. Алгоритм не слишком хорош. Плохо ещё и то, что Paint всегда создает палитру на 256 цветов, даже если использует для кодирования рисунка всего 2 цвета.

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

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

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

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

Заключая разговор о GIF, скажу ещё, что этот формат позволяет задавать в картинке прозрачные цвета:

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

Формат JPEG

Еще один графический формат очень популярен в Интернет — формат JPEG (файлы с расширением jpg или jpeg).

Сокращение JPEG возникло от названия группы, которая разработала этот формат: Joint Photographic Experts Group, Объединенная группа экспертов по машинной обработке фотографических изображений.

Формат JPEG содержит 24-битную информацию о цвете пиксела, но при формировании графического файла используется метод сжатия, при котором часть цветов просто отбрасывается:

Используя сжатие с потерями, JPEG способен уплотнить графические данные от 10 до 20 раз без видимой потери качества.

Посмотрите на приведенную ниже иллюстрацию. Размер файла, записанного в формате JPEG, в 6 раз меньше размера файла, записанного в формате GIF при одинаковом качестве изображения:

Даже очень сильное JPEG-сжатие исходного изображения сохраняет много цветов картинки, чего нельзя сказать про GIF-файл того же размера:

— Значит, лучше всего записывать графику в формате JPEG?

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

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

На приведенной ниже иллюстрации изображение в формате JPEG имеет явные погрешности, а размер файла в 4 раза больше, чем у рисунка в формате GIF:

Вася произвел вычисления и недоверчиво посмотрел на Шурика.

— Мне кажется, ты неверно записал размер GIF-файла для последней картинки. В этом файле, даже без заголовка и палитры должно быть 230 · 180 · 2 = 82800 бит, то есть 10350 байт, а никак не 914!

Шурик был явно доволен дотошностью Васи.

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

— Ага! Теперь понятны твои слова о том, что формат GIF хорошо подходит для рисунков с однотонными областями!

— Верно! Причина именно в алгоритме уплотнения кода в формате GIF.

Вот ещё пример картинки, для которой формат GIF предпочтительнее формата JPEG (исходный файл в формате BMP имеет размер 128 214 байт):

— Возникает вопрос: как управлять плотностью сжатия в формате JPEG?

— Редактор Paint не позволяет управлять сжатием. Он записывает JPEG-файл, подбирая “оптимальное”, с точки зрения его алгоритма, сжатие, что не всегда соответствует ожиданиям пользователя.

Другие редакторы имеют средства для установки JPEG-сжатия по условной шкале, например, от 0 (максимальное сжатие) до 100 (максимальный размер файла).

В редакторе Photoshop 6 сжатие изменяется от 0 (максимальное сжатие, низкое качество) до 12 (минимальное сжатие, высокое качество).

— Форматы GIF и JPEG позволяют хранить изображение в “уплотненном” виде. Вероятно, формат BMP компьютерные художники вообще не используют?

— Картинку записывают в формате BMP тогда, когда нужно гарантированно сохранить ее исходное качество, например, при передаче иллюстраций в книжное издательство.

Вопросы

  1. Нарисуйте схему хранения картинки в видеопамяти компьютера.

  2. Как кодируется цвет одного пиксела в видеопамяти компьютера?

  3. Нарисуйте схему хранения картинки в BMP-файле.

  4. Как кодируется цвет одного пиксела в BMP-файле?

  5. Нарисуйте схему хранения картинки в GIF-файле.

  6. Как кодируется цвет одного пиксела в GIF-файле?

  7. Нарисуйте схему хранения картинки в JPEG-файле.

  8. Какую информацию содержит заголовок графического файла?

  9. В каких случаях для хранения картинок используют формат BMP?

  10. В каких случаях для хранения картинок используют форматы GIF и JPEG?

  11. В каких случаях небольшой размер картинки особенно важен?

  12. В каких случаях формат GIF имеет преимущество перед форматом JPEG?

  13. В каких случаях формат JPEG имеет преимущество перед форматом GIF?

  14. Почему формат GIF хорошо подходит для картинок с однотонными областями?

  15. Что такое прозрачный GIF?

  16. Что такое анимированный GIF?

  17. Сколькими битами кодируется цвет в GIF-формате?

  18. Сколькими битами кодируется цвет пиксела в JPEG-формате?

  19. Сколько цветов может быть в GIF-палитре картинки?

  20. Какие значения может принимать размер GIF-палитры?

  21. Можно ли записать картинку, в которой использовано больше 256 цветов, в формате GIF?

  22. Как на практике выбрать правильный формат для хранения графического файла?

  23. Как в редакторе Paint записать картинку в формате GIF?

  24. Как в редакторе Paint записать картинку в формате JPEG?

  25. Как управлять качеством и размером картинки в формате GIF?

  26. Как управлять качеством и размером картинки в формате JPEG?

  27. Как устроено сжатие кода картинки в формате GIF?

  28. Верно ли утверждение: “в формате GIF картинка всегда записывается без искажений”?

  29. Почему сжатие кода картинки в формате JPEG называют сжатием с потерями?

  30. Как вычислить размер видеопамяти, необходимый для хранения картинки размером WxH при режиме цветности монитора 16 бит на пиксел? Привести общую формулу и произвести по ней вычисления при W=40 и H=50.

  31. Расскажите алгоритм вычисления размера кода картинки размером WxH в формате GIF, если в картинке использованы n цветов. Не учитывать размер заголовка файла и GIF-сжатие, но учитывать размер палитры. Выполнить вычисления для W=40, H=50 и n=10.

Домашние задания

Вариант1Вариант 1

На рисунке показано пикселное изображение дорожного знака “Въезд запрещён”.

  1. Запишите BMP-код рисунка (без заголовка) при 24-битном режиме цветности. Цвет каждого пиксела кодировать тройкой десятичных чисел. Вычислите размер BMP-файла.

  2. Запишите GIF-код рисунка (без заголовка и сжатия) при минимальном размере GIF-палитры. Цвета в палитре записывайте десятичными числами, а код изображения — двоичным кодом. Вычислите размер GIF-файла.

Вариант2 Вариант3Варианты 2, 3

  1. Картинки в формате BMP перепишите в форматы GIF и JPEG, стараясь получить файлы как можно меньшего размера с приемлемым качеством изображения. Для работы используйте редактор Photoshop или другой редактор, который позволяет управлять числом цветов в GIF-палитре и степенью JPEG-сжатия. Набор картинок в формате BMP возьмите у учителя.

    Для каждой картинки заполните таблицу, пометив в ней выбор лучшего формата:



    Для вычисления сжатия используйте программу Калькулятор. Вычисление выполняется по формулам:

Азы информатики RU 2000/2004 © А.А.Дуванов

Вверх Выход из читального зала