JPEG, PNG, WebP или AVIF: какой формат оставить?
У меня одна и та же картинка в четырёх форматах. Какую оставить, а какие удалить?
Начинайте с картинки, а не с формата
Спор о форматах почти всегда не тот спор, с которого стоит начинать. Исход решает содержимое изображения. Фотографии состоят из плавных зашумлённых градиентов, в которых нет повторяющихся цепочек пикселей. Скриншоты, логотипы, схемы и пиксель-арт состоят из однотонных областей, резких границ и небольшого набора точных цветов. Эти два вида картинок сжимаются совершенно разными механизмами, и формат, отличный в одном, обычно посредствен в другом.
Поэтому первый вопрос звучит не «лучше ли AVIF, чем JPEG», а «это фотография или графика и нужна ли здесь прозрачность». Как только вы на него ответите, в списке кандидатов обычно останется один-два формата.
Что на самом деле умеет каждый формат
| Формат | Сжатие | Прозрачность | Анимация | Где уместнее всего |
|---|---|---|---|---|
| JPEG | Только с потерями | Нет | Нет | Фотографии, которые должны открываться где угодно |
| PNG | Только без потерь | Да, 8-битный альфа-канал | Нет (APNG — отдельная возможность) | Скриншоты, логотипы, плоская графика, точные пиксели |
| WebP | С потерями или без потерь | Да, в обоих режимах | Да | Универсальная замена и JPEG, и PNG |
| AVIF | С потерями или без потерь | Да, в том числе 10-битная | Да | Фотографии, когда время кодирования приемлемо |
Таблица умалчивает об одном, что стоит проговорить вслух: PNG нельзя уменьшить, опустив ползунок качества, потому что ползунка качества у него нет. Оптимизатор PNG сокращает файл, подбирая более удачный фильтр предсказания и более удачную палитру, а не отбрасывая детали. Поэтому фотография, сохранённая в PNG, остаётся огромной, каким инструментом её ни обрабатывай: в самом формате нет ничего, что позволило бы выбросить информацию.
«С потерями» и «без потерь» — это не оценки качества
Заманчиво прочитать «без потерь» как «хорошо», а «с потерями» как «плохо». Это не оценки качества, это разные задачи. Без потерь означает, что декодированные пиксели побитово совпадают с исходными; такой формат правилен, когда важны именно пиксели, — например, скриншот интерфейса, с которого кто-то будет читать текст. С потерями означает, что кодировщику разрешено отбрасывать детали, которые глаз плохо замечает, и только поэтому двенадцатимегапиксельная фотография вообще умещается в несколько сотен килобайт.
Полезное правило: если вы заметите один-единственный неверный пиксель, берите формат без потерь. Если не заметите, формат с потерями при разумной настройке качества даст куда меньший файл, а разницы при обычном размере просмотра вы не увидите.
Чем оправдывают себя WebP и AVIF
Оба более новых формата используют инструменты предсказания и преобразования, которых нет у JPEG, стандартизованного в 1992 году. На практике это значит, что они достигают сопоставимого визуального качества при меньшем размере, и оба умеют прозрачность, чего JPEG не умеет вовсе. WebP — прагматичный вариант: кодирует быстро и заменяет одним форматом сразу и JPEG, и PNG. AVIF — амбициозный: он использует внутрикадровые инструменты видеокодека AV1, поддерживает большую битовую глубину и для фотографического содержимого обычно даёт самый маленький файл из четырёх.
Плата за это — время кодирования. Кодирование AVIF представляет собой задачу поиска, и кодировщик тратит на неё реальное процессорное время. Во вкладке браузера, на телефоне, это время ваше — поэтому FileSlimmer показывает для AVIF прогресс по каждому файлу, а не делает вид, что ожидания не происходит. Если вы конвертируете одну заглавную картинку, размен очевидно того стоит. Если четыреста — присмотритесь к WebP.
Конвертация старого файла не отменяет старых повреждений
Это самое частое разочарование. Если взять JPEG, сохранённый много лет назад с низким качеством, и конвертировать его в PNG или в WebP без потерь, блочность и звон будут в точности скопированы в новый файл. «Без потерь» означает «идентично входу», а во входных данных повреждения уже впечатаны в пиксели. Вы получите файл побольше ровно с теми же изъянами.
Конвертация файла с потерями в другой формат с потерями — это второй, отдельный проход сжатия, поэтому он способен добавить сверху собственные артефакты. Когда есть выбор, конвертируйте из самого исходного файла, который у вас ещё сохранился, — оригинала с камеры, экспорта из графического редактора, — а не из копии, уже прошедшей через компрессор.
Короткий список, которым можно пользоваться
- Фотография, которая должна открываться в чём угодно, включая старые программы: оставляйте JPEG.
- Фотография для вашего собственного сайта или приложения, где вы сами решаете, чем её читают: WebP, а если можете позволить себе время кодирования — AVIF.
- Скриншот, логотип, схема, график или что угодно с текстом в пикселях: PNG или WebP без потерь, если размер важнее универсальной поддержки.
- Всё, чему нужен прозрачный фон: PNG, WebP или AVIF. Не JPEG.
- Архивная копия, которую вы, возможно, ещё будете править: храните исходный файл, каким бы он ни был, а любую сжатую версию считайте одноразовой.
Чего это сравнение вам не говорит
Здесь нет рейтинга по размеру, и это сделано намеренно. Опубликованные сравнения измеряются на конкретном наборе изображений, с конкретными версиями кодировщиков и настройками, и результат смещается, стоит любому из этих условий измениться. Единственная проверка, которая описывает вашу картинку, — это ваша картинка. Сконвертируйте один и тот же исходник по разу в каждый из вариантов при настройке качества, которую считаете приемлемой, а затем сравните два числа и два изображения рядом.
Поддержка тоже меняется со временем. Прежде чем переводить целую библиотеку на более новый формат, выясните, что должно открывать эти файлы: браузер, галерея телефона, принтер, десятилетняя настольная программа заказчика. Лучший формат — самый компактный из тех, которые всё в этом списке действительно способно прочитать.
Инструменты для этого
Источники
- ITU-T T.81 — the JPEG standard
- W3C — Portable Network Graphics (PNG) Specification (Third Edition)
- Google — WebP container and bitstream documentation
- Alliance for Open Media — AV1 Image File Format (AVIF)