JPEG — формат-динозавр. Ему уже за тридцать, но он по-прежнему живее всех живых: даже в 2025 году изображения в JPEG встречаются повсюду.

В конце 80-х инженерам нужно было как-то справляться с растущими размерами файлов. Интернет был медленным, а фотографии — всё тяжелее. Тогда и придумали решение: сжатие с потерями, основанное на дискретном косинусном преобразовании (DCT). Если по-простому, DCT — это способ выкинуть из картинки то, чего наш глаз почти не заметит, и оставить главное. В итоге получаем файл в разы меньше, а картинка всё ещё выглядит прилично.

Почему именно этот подход победил конкурентов, кто его протолкнул и как JPEG стал «языком» интернета для изображений — обо всём этом дальше.


Что было до JPEG: краткий экскурс в историю сжатия

В 1948 году Клод Шеннон и Роберт Фано предложили способ сжатия данных без потерь. Их идея напоминала стенографию: самые частые символы кодировались коротко, редкие — длиннее. В 1952 году эту концепцию довёл до совершенства Дэвид Хаффман. Его алгоритм даже использовали архиваторы вроде PKZIP и LZH — именно благодаря такому софту в 80–90-х файлы «сжимались в несколько раз» и помещались на дискету.

В 1965 году Джеймс Кули и Джон Тьюки «переоткрыли» быстрое преобразование Фурье (FFT). Если совсем грубо, метод раскладывалсигнал на частоты, как аккорд на ноты. Этот инструмент оказался настолько удобным, что стал стандартом для десятков областей — от радиолокации до цифровой музыки. Без FFT не было бы ни MP3, ни многих методов обработки изображений.

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

Все эти шаги постепенно готовили почву для JPEG. Учёные научились экономить место, разбирать сигналы на составляющие и убирать лишнее, не теряя сути. Когда пришло время кодировать фотографии, фундамент уже был заложен.

Были и другие методы. Однако первым популярным форматом стало кодирование длин серий  (RLE), впервые использовавшийся еще в 1967 году при передаче аналогового телевизионного сигнала. А в 1983 году Hitachi, оценив потенциал, запатентовал RLE

Главной особенностью RLE была простота. Если кратко, то физический размер уменьшается за счет «схлопывания» повторяющихся элементов. Например, есть последовательность из пяти зеленых пикселей в цветном изображении. Вместо «зеленый зеленый зеленый зеленый зеленый» условно записывается «зеленый х5». Отличное решение для простейших изображений вроде компьютерных иконок с ограниченным набором цветов или черно-белых картинок, где речь вообще идет про наборы полос из черных и белых пикселей.

В первую очередь картинки, сжатые RLE, распространялись в начале 80-х через ранние сервисы обмена файлами по коммутируемым сетям — например, CompuServe и BBS. RLE также использовался в первых графических форматах вроде PCX и MacPaint. Но по мере роста качества изображений оказалось, что такой примитивный метод справляется только с простыми картинками, где много одноцветных областей. Для фотографий и более сложной графики он почти не давал выигрыша в размере — а иногда файлы даже становились больше.

Примеры изображений, передаваемых в CompuServe, с использованием кодирования длин серий
Примеры изображений, передаваемых в CompuServe, с использованием кодирования длин серий

В 1987 году Стивен Уилхайт, инженер в CompuServe, представил новый формат — Graphics Interchange Format, GIF (мы привыкли говорить «гиф», хотя сам автор настаивал на произношении «джиф»). Это был совершенно другой подход к цветным изображениям: 8 бит на пиксель, что позволяло отображать до 256 уникальных цветов из 24-битного пространства RGB, при этом данные сжимались без потерь.

Первая GIF-анимация — можно оценить качество изображения 1989 года
Первая GIF-анимация — можно оценить качество изображения 1989 года

Сжатие основывалось на алгоритме Лемпеля–Зива–Уэлча (LZW), который развивал идеи LZ77 и LZ78. Вкратце принцип таков: программа ищет повторяющиеся последовательности символов и вместо хранения каждого повтора сохраняет «ссылку» на первый экземпляр. Эти последовательности заносятся в словарь, который динамически строится во время обработки данных. Такой подход позволял сжимать изображения в среднем в 2–3 раза эффективнее, чем старый метод RLE.

Экспериментальная цифровая камера Kodak Стивена Сассона
Экспериментальная цифровая камера Kodak Стивена Сассона

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

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

Как появился JPEG: спасибо Насиру Ахмеду, IBM и другим

В 1972 году Насир Ахмед, профессор Университета штата Канзас, предложил революционный алгоритм — дискретное косинусное преобразование (DCT). Именно оно позже легло в основу JPE

Если объяснять без погружения в математику преобразований Фурье: изображение «раскладывается» на набор косинусоидальных волн разной частоты и амплитуды. Каждой такой волне присваивается свой весовой коэффициент. За счёт аппроксимации — то есть приближённого представления исходных данных с помощью этих волн — можно убрать те детали, которые меньше всего влияют на восприятие картинки.

Насир Ахмед придумал метод, который лег в основу формата JPEG и не только
Насир Ахмед придумал метод, который лег в основу формата JPEG и не только

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

Более подробно простым языком принцип DCT объясняет Сид Шанкер в своей статье «Дискретное косинусное преобразование в действии». А с оригинальной статьей Насира Ахмеда 1974 года можно ознакомиться здесь

Но вернемся к появлению JPEG. В 1986 году из специалистов CCITT (комитет по международной телеграфии и телефонии), ISO и IEC образовалась рабочая группа, получившая название Joint Photographic Experts Group (сокращенно JPEG, или «Объединённая группа экспертов по фотографии»). Она поставила амбициозную цель — создать универсальный формат сжатия.

Специалисты обратились к ведущим ученым в области кодирования данных, работавших в «гигантах» индустрии: IBM, Canon, Mitsubishi Electric, AT&T и десятках других. И каждый из них за следующие 6 лет внес свой вклад в появление стандарта. Но самый большой след оставили два сотрудника IBM — Уильям Б. Пеннебейкер и Джоан Л. Митчелл. 

«Проблема заключалась не столько в отсутствии алгоритмов сжатия изображений (поскольку в этой области было множество наработок)», — пишут Пеннебейкер и Митчелл в своей 600-страничной книге «JPEG: Still Image Data Compression Standard», — «а скорее в отсутствии стандартного алгоритма, который позволил бы обмениваться изображениями между различными приложениями».

В 1988 году они подали заявку на патент US4905297A «Система арифметического кодирования и декодирования», где описывался алгоритм в том виде, который используется и сегодня.

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

Дальше разберём некоторые из этих нюансов — от математических основ до практических ограничений.

Перевод в цветовое пространство YCbCr

После долгих обсуждений и экспериментов разработчики решили использовать не привычное RGB, а цветовое пространство YCbCr. Его особенность в том, что яркость (Y) отделена от цветовых компонентов (Cb и Cr). Такой подход должен был упростить последующую обработку: можно отдельно работать с деталями яркости и аккуратно «урезать» цветовую информацию.

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

Размер паттернов

Чтобы проанализировать изображение, его нужно разбить на стандартные блоки — паттерны. Разработчики остановились на матрице 8×8 пикселей.

Почему именно такой размер? Для конца 80-х типичное изображение имело разрешение около 720×575 пикселей. Блоки 4×4 были бы слишком малы и плохо «ловили» закономерности в картинке — после сжатия качество заметно падало. А блоки 16×16, наоборот, требовали слишком много вычислений и содержали слишком много малозначимых деталей для восприятия.

Метод преобразования

Дальше каждый из 64 элементов блока 8×8 пикселей должен был пройти то самое преобразование, которое позволило бы разделить данные и присвоить им коэффициенты. К дискретному косинусному преобразованию (DCT) разработчики пришли не сразу.

В 1987 году на встрече в Копенгагене рабочая группа рассмотрела десять возможных методов сжатия. Чтобы выбрать оптимальный, провели тесты на пяти эталонных фотографиях при разной степени сжатия: от 2,25 до 0,08 бита на пиксель (примерно от 4:1 до 200:1).

Одна из пяти фотографий, подвергавшихся анализу
Одна из пяти фотографий, подвергавшихся анализу

Лучше всего показали себя два подхода: дискретное косинусное преобразование (DCT-II) и преобразование Карунена–Лоэва (KLT). KLT давал немного более высокое качество сжатия, но требовал почти втрое больше вычислительных ресурсов. Для компьютеров конца 80-х это было слишком. Поэтому выбор пал на DCT — метод, который обеспечивал хороший компромисс между качеством изображения и скоростью обработки. Его ключевое преимущество называли «уплотнением энергии»: большая часть визуально значимой информации концентрировалась в нескольких коэффициентах, а незначительные данные можно было отбросить.

Квантование

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

  • ANT Labs (входила в CCITT),

  • Copenhagen Telephone Company (KTAS) Labs.

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

Ниже на картинке пример таблицы квантования JPEG. Каждое число показывает, насколько сильно можно «огрубить» соответствующий коэффициент блока 8×8. Чем число больше, тем меньше значение этого коэффициента для визуального восприятия, и его можно сильнее округлять или даже отбрасывать. Так высокочастотные детали теряются первыми, а основные — остаются.

Пример квантования
Пример квантования

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

Последующее сжатие и декодирование

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

Для декодирования требовалось провести все те же этапы в обратной последовательности: 

  • Преобразовать таблицу Хаффмана и декодировать данные;

  • Извлечь коэффициенты для каждого блока 8х8 и провести обратные преобразования;

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

  • Преобразовать полученные значения цветового пространства YCbCr в привычный RGB.

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

Проблема медленной загрузки

В JPEG разработчики предусмотрели несколько режимов сжатия, но основными стали два:

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

  • Progressive — режим, когда сначала выводится упрощённая версия картинки, а затем постепенно подгружаются детали.

Изначально основным считался Sequential. Но тесты быстро показали: даже относительно качественные изображения при тогдашних скоростях сетевых соединений загружались слишком медленно. Поэтому в стандарт добавили Progressive — он позволял сначала показать пользователю «черновик» картинки, а затем дорисовать её. Через несколько лет проблема медленных соединений исчезла сама собой, но именно благодаря Progressive JPEG удержал популярность в переходный период.

Распространение стандарта и патентный спор: как Compression Labs заложила бомбу замедленного действия 

Оригинальная спецификация JPEG после шести лет кропотливой работы была опубликована в 1992 году и стала первой из семейства стандартов ISO/IEC 10918 «Цифровое сжатие и кодирование непрерывных полутоновых неподвижных изображений» (сейчас их уже семь). Год спустя появилось дополнение Lossless JPEG — для сжатия без потерь.

Примечательно, что первой операционной системой с поддержкой JPEG оказалась не MacOS и не Windows, а OS/2 — продукт IBM. Именно специалисты IBM внесли наибольший вклад в появление стандарта.

Но далеко не все сразу поверили в новый формат. Например, первый массовый графический браузер NCSA Mosaic долгое время работал в основном с GIF, PCX и другими форматами, а JPEG игнорировал. Поддержка появилась лишь в 1994 году в Netscape Navigator — и тогда JPEG быстро вытеснил конкурентов.

С Netscape JPEG получил по-настоящему массовое распространение
С Netscape JPEG получил по-настоящему массовое распространение

Но неожиданно возникла проблема, поставившая будущее JPEG под вопрос. В 1986 году сотрудники Compression Labs Вэнь-Сюн Чен и Дэниел Кленке подали заявку и получили патент US4698672A «Система кодирования для уменьшения избыточности». В нем описывался похожий способ сжатия изображений с потерями. 

Блок-схема которая привела к серьезному правовому спору
Блок-схема которая привела к серьезному правовому спору

После получения патента в Compression Labs про него забыли. Но в 1997 году компанию купила Forgent Networks — производитель программного обеспечения. В 2002 году Forgent Networks обнаружила полузабытый патент и заявила: «Все, кто использует JPEG, должны платить нам отчисления».

Чтобы подкрепить свою уверенность, компания подала заявление в Ведомство по патентам и товарным знакам США и… неожиданно для всех выиграла. С 2002 по 2004 год Forgent Networks получила свыше 100 млн долларов от 44 компаний, выпускавших ПО и цифровые камеры.

«В некотором смысле этот патент — лотерейный билет, — рассказывал финансовый директор Forgent Networks Джей Петерсон в интервью CNET в 2005 году. — Если бы пять лет назад мне сказали: „У вас есть патент на JPEG“, я бы не поверил».

В это не могли поверить и ведущие эксперты отрасли, и весь консорциум JPEG. Тем более подобный фокус за 10 лет до этого уже провернула Unisys по отношению к GIF, когда он был самым популярным стандартом в интернете. В 1994-1995 годах Unisys взимали по 5000 долларов с владельцев сайтов за право использования формата. Но у них было хоть какое-то основание, поскольку они обладали правами на алгоритм LZW. 

Forgent Networks не могла похвастаться и этим. Поэтому в 2005 году на нее был подан 21 встречный иск от крупных компаний, включая Microsoft, с формулировкой: «Они подрывают JPEG-стандарт, чтобы извлечь миллионы долларов необоснованной прибыли».

Все закончилось в 2006 году, когда суд признал патент недействительным на основании принципа «предшествующего уровня техники». Forgent еще ухитрился получить 8 млн долларов от IBM и Hewlett-Packard в рамках урегулирования спора, хотя первоначально речь шла об одном миллиарде долларов. 

В итоге JPEG все-таки преодолел все юридические трудности и стал форматом, не требующим лицензирования.

JPEG не умрет в ближайшее время: как и MP3 c ZIP

Конечно, за последующие 30 лет появилось множество альтернатив JPEG для растровой графики. Например:

А еще есть WebP, H.265 и AVIF и другие. И все они намного более эффективны, чем старый-добрый JPEG. Вот только статистика говорит о том, что он по-прежнему популярен — в этом формате ежедневно передаются миллиарды растровых изображений, а его поддерживают все операционные системы (Windows, macOS, Android, iOS), социальные сети, браузеры и большинство веб-сайтов.  

Статистика на 2023 год — JPEG уступает по популярности только PNG. Прогрессивный WebP с долей 4% безнадежно отстает.
Статистика на 2023 год — JPEG уступает по популярности только PNG. Прогрессивный WebP с долей 4% безнадежно отстает.

Похоже, что JPEG никуда не денется, как и не менее морально устаревшие MP3 или ZIP. Причина проста — пользователи не хотят париться: JPEG гарантированно откроется на любом устройстве и браузере. А массовой потребности в более совершенном сжатии файлов или лучшем качестве, кажется, просто нет. 


НЛО прилетело и оставило здесь промокод для читателей нашего блога:

-15% на заказ любого VDS (кроме тарифа Прогрев) — HABRFIRSTVDS

Комментарии (3)


  1. a3d
    30.09.2025 08:46

    А если бы в нулевых jpeg бы внедрил поддержку альфа-канала - он победил бы вообще всех и навсегда ;)


  1. winorun
    30.09.2025 08:46

    Благодаря этому GIF был удобен даже при работе с медленными модемами: файл размером, например, в 100 КБ можно было передать за несколько минут, а не десятки минут, как раньше.

    Может вы хотели указать размер файла в точках, а не в КБ?

    KLT давал немного более высокое качество сжатия, но требовал почти втрое больше вычислительных ресурсов. Для компьютеров конца 80-х это было слишком. Поэтому выбор пал на DCT — метод, который обеспечивал хороший компромисс между качеством изображения и скоростью обработки.

    это каким образом?


  1. Zara6502
    30.09.2025 08:46

    немного подушню, на КДПВ указано ненужное качество 100%, хотя JPG в разбеге 85-90-95 вполне хорошо позволяет поиграться как качеством так и размером, при этом не сильно и ухудшая исходную картинку. Я использую 95 там где мне важно качество и 85 когда важно только визуальное содержимое.