🔥

Тред (Полина Гуртовая)


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

С потерями умеют сжиматься jpeg, webp и avif. Стоит также отметить, что все форматы без потерь тоже можно сжимать с потерями. Например, можно сконвертировать png-шку из режима true color в режим индексированной палитры и порезать количество цветов, скажем, до восьми.

Не буду вдаваться в подробности сжатия для каждого формата, но попробую показать "на пальцах" как могут вноситься потери для сжатия.

Для начала каждый канал изображения разбивается на кусочки. На какие – зависит от кодека (от формата). Получается что каждый кусочек это просто массив целых циферок.
notion image

Каждый кусочек (вернее циферки его представляющие) преобразуются специальной математикой. Преобразований может быть несколько, но конечным как правило является разложение на частотные составляющие (DCT). Сейчас расскажу что это

Представим себе что у нас есть несколько картинок – базис. Накладывая базисные картинки друг на друга (допустим с разными прозрачностями) мы можем получить произвольный блок. Прозрачность – коэффициент нашего разложения. А каждая картинка это "частота".
notion image

Потери это просто зануление коэффициентов для определенных частот.

Древние форматы (jpeg) пилились индивидуально. Более новые – lossy webp и avif это побочное следствие того как круто развились видеокодеки.

avif и lossy webp это просто фреймы видео, пережатого для avif - AV1 кодеком, а для webp - VP8 кодеком, уложенные в специальные контейнеры вместе с метаданными.

Все сказанное выше про частотное разложение актуально для avif и lossy webp. А в качестве промежуточной трансформации блока выступают предсказания.

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

Например, в качестве предсказания можно заполнить весь блок усредненным значением всех соседних с блоком пикселей.

Способы разбиения на блоки и набор режимов предсказаний отличаются для avif и webp. avif более фичастый. Например, он умеет эффективно хранить повторяющиеся кусочки изображений.

avif использует универсальный контейнер – HEIF. Это универсальный формат для хранения изображений. В нем, например, хранятся фоточки на айфонах, пережатые H.265 кодеком

На низких качествах остальные форматы начинают распадаться на блоки, а avif выглядит очень круто.
notion image

Правда, как показывает практика, на нормальных качествах AVIF особого выигрыша не дает.