Архивы

Сжатие без потерь: почему JPG не сожмётся в ZIP

Вы кладёте папку с фотографиями в ZIP, ждёте волшебства — а размер почти не изменился. Знакомое разочарование. Дело не в плохом архиваторе: за этим стоит красивый закон из теории информации. Разберёмся, как архив вообще сжимает, что такое энтропия и почему одни файлы ужимаются в разы, а другие — никак.

Вскрытый жёсткий диск крупным планом: зеркальная пластина и блок магнитных головок
Любой файл на диске — это последовательность байтов. Сжатие без потерь ищет в ней закономерности, чтобы записать короче. Фото: Pexels

Как архив вообще сжимает данные

Чтобы понять, почему JPG не жмётся, сначала нужно понять, как вообще работает сжатие. Возьмём простой пример. Строку AAAAAAAA (восемь букв A) можно записать короче: «8 раз A». Мы не потеряли ни капли информации, но заняли меньше места. Это и есть суть сжатия без потерь — найти повторы и закономерности и записать их компактнее.

Настоящие архиваторы делают это умнее, но принцип тот же. Алгоритм DEFLATE в ZIP работает в два этапа: сначала ищет повторяющиеся куски и заменяет их короткими ссылками на предыдущее вхождение, а затем кодирует результат так, что частые символы получают короткие коды, а редкие — длинные (код Хаффмана). LZMA в 7z действует похоже, но заглядывает дальше и находит повторы на большом расстоянии — оттого и жмёт плотнее.

Ключевая идея

Сжатие без потерь живёт за счёт повторов и предсказуемости. Есть закономерности — есть что сжимать. Данные выглядят как случайный шум — сжимать нечего.

Два вида сжатия: без потерь и с потерями

Здесь важно развести два принципиально разных подхода, которые часто путают.

Сжатие без потерь (lossless) уменьшает файл так, что при распаковке данные восстанавливаются байт в байт — ровно то, что было. Так работают ZIP, RAR, 7z, а также форматы PNG (картинки) и FLAC (звук). Ничего не теряется: разжатый файл идентичен исходному. Именно поэтому архиваторы всегда без потерь — иначе они портили бы ваши документы.

Сжатие с потерями (lossy) идёт на сделку: оно безвозвратно выбрасывает часть информации ради куда меньшего размера, стараясь удалить то, чего человек почти не заметит. Так работают JPG (фото), MP3 (музыка), MP4 (видео). Разжатый JPG уже не равен оригиналу — часть деталей потеряна навсегда. Зато файл в разы легче. Как это выглядит на примере фотографий, подробно разобрано в статье почему JPEG теряет качество.

СвойствоБез потерьС потерями
Данные после распаковкиТочно как былиЧасть потеряна
Степень сжатияУмереннаяОчень высокая
ПримерыZIP, PNG, FLACJPG, MP3, MP4
Где нужноДокументы, код, архивыФото, звук, видео

Энтропия и предел, который нельзя перейти

А теперь — красивая часть, объясняющая всё. У любых данных есть характеристика под названием энтропия — мера их непредсказуемости, «беспорядка». Чем данные упорядоченнее и повторяемее, тем ниже их энтропия. Чем ближе к случайному шуму — тем выше.

И вот главный закон: нельзя без потерь сжать данные меньше их энтропии. Это фундаментальный предел, доказанный ещё в теории информации Клода Шеннона. Если в данных много порядка (низкая энтропия) — их можно сильно ужать. Если данные близки к случайным (высокая энтропия) — сжать их не выйдет вообще, хоть каким архиватором. Полностью случайную последовательность байтов нельзя сжать ни на байт.

Сжатие не «уплотняет» данные волшебством — оно лишь убирает избыточность. Нет избыточности — нечего убирать. Это закон, а не недоработка программ.
Ряды серверных лезвий с зелёными индикаторами — большие объёмы данных
Чем ближе данные к случайным, тем выше их энтропия — и тем меньше их можно сжать без потерь. Фото: Pexels

Почему JPG, MP4 и MP3 не ужимаются

Теперь всё складывается. JPG, MP4 и MP3 — это форматы со встроенным сжатием с потерями. Когда файл сохраняется в JPG, из него уже выжали избыточность и выбросили лишнее. На выходе получается плотный поток данных, который выглядит почти как случайный — его энтропия высока, он близок к своему пределу сжатия.

Что происходит, когда вы кладёте такой файл в ZIP? Архиватор честно ищет повторы и закономерности — но их почти нет, всё уже вырезано форматом. Сжимать нечего. Поэтому размер падает лишь на проценты, а иногда файл даже чуть увеличивается: архив добавляет свою служебную информацию (заголовки, оглавление), а сэкономить не на чем. Это не поломка — это математика.

Отсюда практический вывод

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

Что сжимается хорошо, а что нет

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

TXTжмётся сильно (в разы)
BMPжмётся сильно
JPGпочти не жмётся
  • Сжимается отлично: текст (TXT), таблицы (CSV), логи, исходный код, несжатые картинки (BMP), несжатый звук (WAV). В них много повторов и структуры — низкая энтропия. Тот же формат BMP хранит пиксели без сжатия, поэтому в ZIP он ужимается очень заметно.
  • Почти не сжимается: JPG, PNG (уже сжат без потерь внутри), MP3, MP4, а также сами архивы ZIP, RAR, 7z. Повторно паковать их бесполезно.

Кстати, отсюда понятно, почему PNG тоже почти не выигрывает от ZIP: он и так использует сжатие без потерь внутри себя, избыточность уже убрана. А вот текстовые данные — раздолье для архиватора: в статье про ZIP, RAR и 7z показано, как 100 МБ логов ужимаются до 8–15 МБ.

Что делать, если архив не помогает

Раз архив бессилен против уже сжатого, а уменьшить фото или видео всё же надо — работать нужно с самим файлом, а не с упаковкой. Логика простая: если lossless-сжатие упёрлось в предел, остаётся аккуратно применить сжатие с потерями или уменьшить разрешение.

Уменьшите файл правильно — сжатием, а не архивом

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

Открыть все конвертеры

Итого: сжатие без потерь — это не магия, а вычёркивание избыточности, и у него есть жёсткий предел — энтропия данных. Уже сжатые JPG, MP3 и MP4 к этому пределу близки, поэтому в ZIP не ужимаются. Понимая это, вы перестанете тратить время на бесполезную архивацию медиа и будете сразу сжимать сам файл. А если хотите выбрать архиватор для того, что действительно хорошо жмётся, — вам в разбор ZIP, RAR или 7z.

Потому что JPG уже сжат — внутри него встроенное сжатие с потерями. Архиватор ищет в данных повторы и закономерности, но в готовом JPG их почти не осталось: данные выглядят близко к случайным. Сжимать нечего, поэтому размер после ZIP падает лишь на проценты, а иногда даже чуть растёт из-за служебной информации архива.
Сжатие без потерь (ZIP, PNG, FLAC) уменьшает файл так, что после распаковки данные восстанавливаются байт в байт — ничего не теряется. Сжатие с потерями (JPG, MP3, MP4) ради меньшего размера безвозвратно выбрасывает часть информации, которую человек почти не замечает. Архиваторы работают только без потерь.
Энтропия — это мера непредсказуемости данных. Чем данные упорядоченнее и повторяемее, тем ниже энтропия и тем сильнее их можно сжать без потерь. Есть теоретический предел: нельзя сжать данные меньше их энтропии. Полностью случайные данные не сжимаются вообще, а уже сжатые файлы близки к этому пределу.
Отлично сжимаются несжатые и повторяющиеся данные: текст (TXT), таблицы (CSV), несжатые картинки (BMP), логи, документы, исходный код — там много повторов. Почти не сжимаются уже сжатые форматы: JPG, PNG, MP3, MP4, а также сам ZIP или 7z. Для них архив бесполезен, а иногда даже слегка увеличивает файл.
Нужно сжимать сам файл, а не архивировать его. Для фото — уменьшить разрешение и, при необходимости, качество JPG. Для PNG есть оптимизация без потерь. Для видео — пережать с другим битрейтом. Это работает с исходником напрямую и даёт реальный выигрыш там, где ZIP бессилен.