Без загрузки, 100% локально, без аккаунта

Статья

Почему изображения теряют качество с каждым сохранением

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

Что на самом деле отбрасывает сжатие «с потерями»

JPEG, формат, стоящий за большинством фото, которыми делятся в сети, сжимает с потерями по замыслу: стандарт ITU-T T.81, лежащий в его основе, преобразует блоки пикселей в частотные данные, а затем округляет эти данные более или менее агрессивно в зависимости от настройки качества, шаг, называемый квантованием. Округление нельзя отменить точно; отброшенная деталь по-настоящему исчезает, а не прячется где-то в файле. Высокая настройка качества округляет мягко, и потерю трудно заметить, низкая округляет жёстко, и файл становится заметно блочным, но даже одно-единственное сохранение в JPEG всегда что-то отбрасывает.

Каждое перекодирование это новое поколение

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

Цепочка из пяти поколений JPEG: каждое перекодирование начинается с уже округлённых пикселей предыдущего, и изображение заметно становится блочнее к пятому поколению

Почему широко распространяемые изображения выглядят хуже

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

У форматов без потерь такой проблемы нет

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

Сравнение десяти повторных сохранений: JPEG показывает нарастающие заметные блочные артефакты, PNG без потерь остаётся пиксель в пиксель идентичным оригиналу

Держим качество файла под контролем

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

Инструменты из этой статьи

Частые вопросы

Деградирует ли JPEG-файл при копировании или перемещении?

Нет. Копирование файла, прикрепление его к письму или перемещение между папками копирует ровно те же байты; ничего не декодируется и не перекодируется заново, так что ничего не квантуется повторно. Потеря поколений происходит только когда пиксели действительно открывают и сохраняют заново, а не когда сам файл просто перемещают.

Можно ли отменить потерю поколений и восстановить утраченную деталь?

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

Останавливает ли конвертация деградировавшего JPEG в PNG проблему?

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

Источники