JPG, PNG, WebP: какой формат картинки выбрать

JPG, PNG, WebP: какой формат картинки выбрать

Фото — JPEG, всё остальное — PNG, а если что-то шевелится — GIF. Так я выбирал форматы годами и честно не смог бы объяснить почему. Работало — и ладно. Потом появились WebP и AVIF, и привычка перестала спасать.

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

Четыре вопроса к любой картинке

Все форматы отличаются, по сути, ответами на четыре вопроса:

  • Пиксели или чертёж? Растровая картинка — сетка цветных точек, как мозаика: увеличишь — увидишь квадратики. Векторная хранит не точки, а инструкцию «нарисуй круг, залей синим», поэтому остаётся чёткой хоть на билборде.
  • С потерями или без? Сжатие без потерь — как архив: распаковал и получил всё до последнего пикселя. С потерями — как пересказ: суть та же, а мелочи, которые глаз почти не замечает, выброшены. Зато файл легче в разы.
  • Нужна прозрачность? Например, логотип, который должен лечь на любой фон без белого прямоугольника вокруг.
  • Нужна анимация?

Дальше каждый формат — просто свой набор ответов.

JPEG — рабочая лошадка для фото

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

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

JPG и JPEG — одно и то же

Это один формат, внутри файлов одинаковые данные — отличается только подпись в имени. Виноваты старые DOS и Windows: там расширение не могло быть длиннее трёх букв, и .jpeg пришлось урезать до .jpg. Ограничение давно исчезло, а привычка осталась, поэтому .jpg и сегодня встречается чаще.

Переименовывать одно в другое можно спокойно, ничего не сломается. А для разработчиков: официальный тип у формата один — image/jpeg. Типа image/jpg в стандарте нет, хотя в чужом коде он нет-нет да попадается.

PNG — без потерь и с прозрачностью

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

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

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

GIF — ветеран, которого держат ради анимации

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

Главное ограничение GIF — не больше 256 цветов в кадре. Для фото это катастрофа: плавные переходы превращаются в полосы и рябь. Прозрачность грубая: пиксель либо виден полностью, либо нет, поэтому на цветном фоне вокруг картинки часто торчит «бахрома».

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

WebP — универсальный

WebP Google представил в 2010 году с простой целью — заменить сразу JPEG, PNG и GIF. И формат действительно умеет всё: сжатие с потерями и без, прозрачность (в том числе вместе с потерями, чего JPEG не умеет вовсе) и анимацию без ограничения в 256 цветов.

При сопоставимом качестве WebP обычно заметно легче и JPEG, и PNG. Все современные браузеры его понимают, так что для сайта это безопасный выбор. Подводят скорее программы: скачал картинку с сайта, а редактор или мессенджер её не открывает — частая история именно с WebP.

AVIF — самый лёгкий

AVIF — самый молодой в списке, и у него «видео» происхождение: он построен на видеокодеке AV1. Отсюда и результат — на фотографиях AVIF часто выходит легче даже WebP при том же качестве. Прозрачность и анимацию тоже умеет.

Почему тогда все не перешли на него? Кодируется он медленно: для одной картинки неважно, для тысяч товаров в каталоге уже ощутимо. И поддержка моложе — старые устройства и программы его понимают не всегда. Поэтому AVIF обычно отдают с подстраховкой: браузер понял — получил самую лёгкую картинку, не понял — получил WebP или JPEG. Посетитель ничего не замечает.

SVG — не картинка, а чертёж

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

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

Шпаргалка

  • Фотография → AVIF или WebP, JPEG в запасе.
  • Скриншот, схема, интерфейс → PNG или WebP без потерь.
  • Логотип, иконка → SVG, а если вектора нет — PNG или WebP с прозрачностью.
  • Анимация → короткое видео или анимированный WebP, но не GIF.
  • Отправить в мессенджер или редактор → JPEG или PNG, их понимает всё.
  • Не знаю, что выбрать → WebP. Ошибиться с ним сложно.

Мифы, в которые я сам верил

«PNG всегда качественнее JPEG». Для фото — нет: на экране разницы не видно, а весит PNG в разы больше. PNG выигрывает там, где есть текст и чёткие края.

«JPEG на 100% качества — это без потерь». Нет. Даже на максимуме что-то теряется, просто очень мало. Режима без потерь у обычного JPEG нет.

«Переименую .png в .webp — и картинка станет легче». Нет, расширение — просто подпись на файле, внутри останется тот же PNG. Формат меняет только конвертация. Исключение — те самые .jpg и .jpeg: там внутри и правда одно и то же.

Если запомнить из статьи что-то одно, пусть будет так: фото сжимаем с потерями, графику и текст — без потерь, иконки — вектором. Остальное подскажет шпаргалка.