Дни, когда картинки в интернете были «медленными», а на жестком диске «тяжелыми», давно прошли. Случилось это во многом благодаря стандарту JPEG. Этот метод сжатия разработали эксперты в области фотографии. Его прелесть заключается в том, что он умеет существенно уменьшать вес изображений за счет незначительной потери в качестве. А назван он по первым буквам комитета, который над ним работал — Joint Photographer Expert Group (Объединенная группа экспертов по фотографии).

История

В октябре 1985, как раз к выходу Windows 1.0, компании Microsoft и IBM разработали самый простой формат для растровых изображений — BMP (Bitmap Picture, дословно означает «изображение с картой битов»), с фиксированной палитрой цветов. Глубина каждого пикселя может быть 1, 4, 8, 16, 24, 32 бита. Вот одна и та же фотография с различной глубиной пикселей:

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

В то время фотографии в интернете попадались редко и грузились долго. При скорости передачи данных 56 кб/с желание поделиться фотографией с человеком на другом конце страны само собой пропадало. К примеру, фотография в 5 МБ загружалась около 12 минут. Решение было предложено Стивом Уилхайтом: уменьшать размер файла, сохраняя только необходимую информацию об изображении — это позволило бы обмениваться изображениями гораздо эффективнее. Такой формат получил название GIF (graphic interchange format, формат для обмена изображениями). Его ключевые особенности, которые позволили ему стать вторым по популярности в интернете — сжатие, прозрачность, анимация. Главным недостатком было всего 8 бит или 256 цветов для изображения.

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

Это решало проблему с весом файлов. Но людям всё ещё не нравилось тратить время, ожидая, пока изображение грузится маленькими горизонтальными линиями, сверху вниз — эта схема называлась baseline. Именно поэтому было принято решение доработать формат, добавить в него ещё одну схему сжатия, чтоб он грузился прогрессивным чередованием. То есть от общего очертания к частным деталям. Такую схему назвали progressive JPEG. Изображение в таком сжатии создает впечатление более быстрой загрузки.

На практике, обе картинки одного размера в JPEG будут грузиться одинаково по времени.

Алгоритм

Что на самом деле происходит за те несколько секунд, пока изображение в RGB сохраняется в формате JPEG? Оно успевает пройти условно четыре этапа.

  1. Изображение переводится в цветовое пространство, в котором яркость и цвета отделены друг от друга, что существенно отличается от пространства RGB. Одним из таких цветовых пространств является YUV. Y (luma), которое содержит информацию о яркости, по сути это и есть изображение, только черно-белое, а U (blue-luminance) и V (red-luminance) — цвета. Поскольку человеческий глаз восприимчив больше к яркости, чем к цвету, такое разделение позволяет сильно ужимать информацию о цвете. В результате существенно уменьшается размер файла, а яркость остается неизменной — значит, и визуально это будет относительно незаметно.
  2. Изображение разбивается на MCU (minimum code unit, минимальная единица данных). MCU — это блок, который занимает площадь 64 пикселя (8х8). Если число строк или столбцов в изображении не кратно 8, то самая нижняя строка и самый правый столбец повторяются нужное количество раз.
  3. Каждый из этих блоков анализируется, подвергается преобразованию. Блоку присваивается усредненное значение цвета. По сути, итоговое изображение — это набор из сжатых блоков. Иногда границы этих блоков видны визуально — это и называется артефактом. Обычно это можно наблюдать при сильном сжатии.
  4. На следующем шаге полученное значение для блоков делится на специальный «коэффициент квантования» (QC), а после округляется до целого. При этом для каждого блока может быть свой коэффициент. Здесь часть информации навсегда теряется. После этого результат записывается в файл в формате JPEG.

Недостатки

  • В JPEG недоступна прозрачность.
  • После того как файлы изображений конвертируются в JPEG, значительная часть информации об изображении навсегда теряется.
  • JPEG непригоден для изображений, которые будут неоднократно редактироваться, так как детали теряются при каждом сохранении.
  • Ещё одно ограничение в том, что JPEG не поддерживает слои.
  • Формат JPEG использует только 8 бит на цвет, что в итоге дает 16,77 миллионов цветов. Большинство современных камер могут делать снимки с 10 или 14 битами на цвет—это 1,07 миллиардов или 4,39 триллионов цветов.
  • JPEG не может хорошо справиться с изображениями с текстом, простыми формами или просто линиями — при сжатии четкие линии размываются.

Достоинства

  • Формат JPEG является универсальным. Его можно открыть и просмотреть практически в любой программе, которая работает с изображениями. Не говоря уже о том, что он совместим со всеми принтерами, фотокамерами и т.д.
  • JPEG сжимает файлы, а значит, их можно хранить в большем количестве, чем файлы изображений в каком-либо другом формате.
  • JPEG является стандартом для интернет-изображений.
  • Позволяет выбрать степень сжатия. У JPEG есть режим сжатия без потерь, но тогда теряется вся суть этого формата.