WebP
WebP
WebP — это формат изображений от Google (2010), который сжимает картинки заметно сильнее JPEG и PNG при сопоставимом качестве. Один файл умеет и фото с потерями, и иконку без потерь, и прозрачность, и анимацию.
История
История WebP начинается не с картинок, а с видео. В 2010 году Google купил
компанию On2 Technologies и получил видеокодек VP8. Кодек был свободный,
без патентных платежей — Google специально планировал противопоставить его
платному H.264, который душил Web-видео лицензионными отчислениями.
Инженеры быстро заметили: видео — это последовательность кадров, а каждый
кадр — по сути картинка. Если взять один кадр VP8 и сохранить как
самостоятельный файл, получится изображение, которое сжимается лучше JPEG.
Так в сентябре 2010 года появился WebP — формат, который заворачивает
ключевой кадр VP8 в контейнер RIFF (тот же контейнер, что и у WAV-аудио).
Вехи развития:
- 2010, сентябрь — анонс WebP, только lossy (с потерями), только цветной.
- 2011 — добавлена поддержка прозрачности (alpha-канала).
- 2012 — добавлен lossless-режим (без потерь, как PNG), он построен
на другом алгоритме, не на VP8. - 2012 — добавлена поддержка анимации (как GIF, только эффективнее).
- 2018 — Edge и Firefox начали поддерживать WebP.
- 2020, сентябрь — Safari 14 добавил поддержку. С этого момента
WebP можно использовать в проде без оговорок: его понимают все
современные браузеры. - 2023 — Google показал JPEG XL и AVIF как «следующие»
форматы, но WebP остался де-факто стандартом, потому что попал в
идеальное окно: он уже везде, а конкуренты ещё нет.
Формат разрабатывала команда WebM Project внутри Google. Спецификация
открытая, лицензия BSD. Это важно — никто не может прийти и потребовать
денег за использование, как это было с GIF (Unisys, патент на LZW) или
с H.264.
Что это такое
WebP — это контейнер с двумя совершенно разными движками сжатия внутри.
Lossy WebP (с потерями) использует ключевые кадры VP8. Алгоритм
разбивает картинку на блоки 4×4 пикселя, предсказывает каждый блок по
соседним (внутрикадровое предсказание — то же, что в видеокодеках), а
разницу между предсказанием и реальностью сжимает арифметическим
кодированием. В среднем lossy WebP даёт файлы на 25–35% меньше JPEG
при том же визуальном качестве. На сложных сценах (трава, листва, шум)
выигрыш меньше, на плоских (логотипы, скриншоты UI) — больше.
Lossless WebP (без потерь) — это вообще отдельный алгоритм. Он
комбинирует несколько техник: предсказание соседних пикселей, цветовую
трансформацию (отдельно сохраняется яркость и хроматика), словарное
сжатие (повторяющиеся блоки кодируются один раз) и кодирование Хаффмана.
В среднем lossless WebP меньше PNG на 25%.
Контейнер RIFF («чанковый» формат) позволяет складывать в один файл
несколько вещей: само изображение, ICC-профиль цвета, EXIF-метаданные,
кадры анимации, alpha-канал отдельно. Браузер при чтении просто берёт
нужные чанки, остальные пропускает.
WebP vs JPEG. JPEG — формат 1992 года, только lossy, без
прозрачности, без анимации. WebP меньше по размеру, умеет прозрачность,
умеет анимацию.
WebP vs PNG. PNG — без потерь, с прозрачностью, без анимации
(анимированный PNG — APNG — есть, но поддержка хуже). WebP в lossless
меньше PNG, и плюс умеет анимацию.
WebP vs GIF. GIF — 256 цветов, страшное качество, гигантские
файлы. Любая анимированная картинка в WebP будет в 2–10 раз меньше,
при этом 24-битный цвет и плавность.
Аналогии из жизни
Вакуумная упаковка для одежды в путешествии.
Берёшь свитер, кладёшь в специальный пакет, выдавливаешь воздух — и
свитер занимает в чемодане в три раза меньше места. Содержимое то же,
выглядит так же, когда достанешь, — просто компактнее. WebP делает
то же с картинкой: ту же информацию упаковывает плотнее.
Где ломается: свитер можно вернуть к исходному виду полностью. Lossy
WebP — нельзя. Если ты пережал картинку в WebP с низким качеством,
вернуть исходные пиксели уже невозможно — часть деталей выбросили
насовсем, как ножницами. Lossless WebP в этом смысле ближе к
вакуумному пакету: можно «надуть обратно» без потерь.
Сухое концентрированное молоко вместо обычного.
Везти из магазина литр молока тяжело и громоздко. А пакетик сухого
молока на тот же литр весит 100 грамм и помещается в карман. Восстановишь
водой — получишь молоко. WebP — это сухое молоко картинок: лёгкий
файл-«концентрат», который браузер на месте «разводит» в полноразмерное
изображение.
Где ломается: сухое молоко по вкусу отличается от свежего, и
дегустатор это поймёт. Lossy WebP при сильном сжатии даёт характерные
артефакты — размытые «пятна» на коже, лёгкое блочное искажение на
границах. Глаз обычного пользователя не заметит, фотограф или
дизайнер — заметит сразу.
Стенограмма вместо аудиозаписи лекции.
Часовая лекция в MP3 — 50 мегабайт. Стенограмма того же содержания —
100 килобайт. Тысячная разница. Получишь почти всё — текст, мысли,
структуру. WebP похож: выбрасывает то, что человеческий глаз всё
равно не различит (тонкие переходы цвета, мелкий шум), оставляет
то, что воспринимается как «та же картинка».
Где ломается: в стенограмме нет интонации, пауз, эмоций — а они
могут быть важны (на лекции по актёрскому мастерству, например).
Так и WebP теряет тонкие нюансы, которые иногда критичны — например,
плавные градиенты в художественной фотографии могут пойти
ступеньками (это называется banding, полошение).
Как это работает
Допустим, у тебя есть JPEG-фото 4000×3000 пикселей, весом 3.2 МБ.
Ты конвертируешь его в WebP с качеством 80 (типичная настройка для веба).
Что происходит:
Шаг 1. Цветовое пространство. Картинка из RGB переводится в YUV —
это значит, что вместо «красный/зелёный/синий» каждый пиксель описывается
как «яркость + два цветовых компонента». Глаз сильно чувствителен к
яркости, к цвету — слабо. Поэтому цветовые компоненты можно ужать в
2 или 4 раза без видимой потери (chroma subsampling, прореживание
цветности).
Шаг 2. Разбиение на блоки. Картинка делится на блоки 16×16
пикселей (macroblock, макроблок), каждый — на 4×4 (subblock,
субблок). Это унаследовано из VP8: видеокодек так работает с каждым
кадром.
Шаг 3. Внутрикадровое предсказание (intra prediction). Для
каждого блока кодер пытается предсказать его содержимое по уже
обработанным соседям сверху и слева. Например, если левый сосед —
ровный синий, а верхний — тоже синий, скорее всего и текущий блок
синий. Записывается не сам блок, а разница между предсказанием
и реальностью. Эта разница часто близка к нулю, а нули сжимаются
очень хорошо.
Шаг 4. Дискретное косинусное преобразование (DCT). Разность
прогоняется через математическое преобразование, которое выделяет
«важные» частоты — крупные структуры (стены, объекты) и «не важные»
— мелкий шум. Высокочастотный шум потом квантуется (округляется)
сильнее. Это и есть «потеря» в lossy.
Шаг 5. Арифметическое кодирование. Финальный поток битов
сжимается арифметическим кодером — статистическим алгоритмом, который
выдаёт меньше битов для часто встречающихся значений и больше — для
редких. JPEG использует более старый и слабый Хаффман, поэтому
проигрывает.
Шаг 6. Упаковка в RIFF. Полученные битовые потоки сворачиваются
в чанки контейнера. К ним добавляются заголовок (RIFF....WEBP),
информация о размере, цветовом профиле и метаданные.
На выходе — файл примерно 1.1 МБ. Те же 4000×3000, визуально та же
картинка, но в три раза меньше JPEG.
При показе в браузере работает обратный процесс: парсинг чанков,
арифметическое раскодирование, обратный DCT, обратное предсказание,
обратная цветовая трансформация. Современные процессоры делают это
на лету за миллисекунды.
Где встречается в обычной жизни
- Открываешь любой сайт на телефоне — больше половины картинок
на современных лендингах уже в WebP. Ты видишь их как обычные
фотографии и не замечаешь формата. - Сохраняешь картинку из Google Images — она часто сохраняется с
расширением.webp. Windows Photos, macOS Preview, iPhone Photos
открывают их без вопросов с 2020 года. - Стикеры в WhatsApp — это анимированные WebP. Поэтому в чате
стикер весит 50–100 КБ, а не мегабайт. - Превью видео на YouTube — WebP. Их там тысячи на одной странице,
каждый сэкономленный килобайт умножается на миллион. - Превью обложек в Spotify, Apple Music — тоже WebP.
Где встречается в IT и бизнесе
- Оптимизация веб-страниц для скорости. Google ранжирует сайты
выше, если они быстро грузятся (метрики Core Web Vitals). Картинки —
обычно 60–70% веса страницы. Перевод их в WebP — самый дешёвый способ
ускорить сайт в 1.5–2 раза без переписывания кода. - CDN и оптимизация трафика. Cloudflare Polish, Bunny Optimizer,
Imgix — все автоматически отдают WebP вместо JPEG/PNG, если браузер
это умеет (определяют по HTTP-заголовкуAccept). Это снижает счёт
за трафик на десятки процентов. - Мобильные приложения. В Android WebP официально поддерживается с
2014 года, в iOS — с iOS 14 (2020). Использование вместо PNG снижает
вес APK/IPA, и приложение быстрее ставится. - Электронная коммерция. На странице карточки товара 10–30 фото.
Если каждое весит 200 КБ вместо 600 КБ — страница грузится за
секунду, а не за три. Конверсия в покупку растёт. - Лендинги недвижимости, авто, туризма. Там много больших
«героических» фото. WebP — стандарт де-факто, потому что JPEG-фото
ширины 1920 пикселей в качестве 90 — это полтора мегабайта, а WebP
тех же параметров — 500 КБ.
Кто пользуется
- Google — везде, где Google показывает картинки своим
пользователям: Search, Images, Photos, Maps, YouTube. По разным
оценкам — экономия трафика в десятки петабайт в месяц. - Meta (Facebook, Instagram, WhatsApp) — стикеры, аватарки,
превью. - Cloudflare — в режиме Polish автоматически конвертирует все
картинки на сайтах клиентов. - Wikipedia — не используют, принципиально остаются на PNG/JPEG
ради совместимости со старым ПО и архивной долговечности. - Большинство современных СMS (WordPress с плагином, Shopify,
Tilda, Битрикс24) генерируют WebP-версии загружаемых изображений
автоматически. У WordPress это плагины WebP Express, ShortPixel,
Smush. - Российские сайты крупных компаний (Ozon, Wildberries, Avito) —
на каждой странице обычно WebP-картинки.
Альтернативы и конкуренты
- JPEG. Плюсы: универсальный, понятный, поддерживается всем
что было сделано после 1992 года. Минусы: больше веса, нет
прозрачности, нет анимации, нет lossless. - PNG. Плюсы: lossless, прозрачность, отлично для скриншотов
и UI. Минусы: гигантские файлы для фотографий, нет современной
анимации. - AVIF (2019, на базе AV1-видеокодека). Плюсы: ещё на 20–30%
меньше WebP, тот же набор фич. Минусы: кодирование медленное (в
десятки раз дольше WebP), Safari поддерживает только с iOS 16
(2022). Постепенно догоняет. - JPEG XL (2021). Плюсы: технически лучше всех, поддерживает
и lossy, и lossless, и прогрессивную загрузку. Минусы: Google
убрал поддержку из Chrome в 2022 году (политическое решение),
поэтому в вебе использовать нельзя. Apple добавила в Safari 17
(2023), но без Chrome формат не взлетает. - GIF. Плюсы: знают все, поддержка везде. Минусы: 256 цветов,
огромные файлы, ужасное качество. Жив только по инерции. - HEIC/HEIF (Apple-формат, на базе H.265). Плюсы: меньше JPEG.
Минусы: проприетарный, патентные платежи, в браузерах не
поддерживается. Используется только в iPhone Photos.
Когда НЕ стоит использовать
- Архивная съёмка, RAW-данные, печать. Lossy форматы для
архива — плохая идея: ты теряешь информацию необратимо. Для
архива лучше RAW или PNG/TIFF. - Совместимость со старыми системами. Windows 7 без обновлений,
старые сборки Outlook, старый Microsoft Office, e-mail-рассылки
для аудитории с устаревшими почтовыми клиентами. WebP в письмах
может не показаться. Для email пока надёжнее JPEG/PNG. - Когда выигрыш в размере не нужен. Если у тебя на странице 2–3
маленькие иконки, экономия 10 КБ не стоит дополнительной сборки.
Используй SVG или PNG, как привык. - Иконки и логотипы с резкими линиями. Тут лучше SVG (векторный
формат). WebP — растровый, при масштабировании теряет качество.
Связанные понятия
- VP8/VP9 — видеокодеки от Google, на которых основан lossy
WebP и его улучшенная версия в WebM. - JPEG — классический формат фото с потерями, 1992 год, против
которого WebP конкурирует. - AVIF — следующее поколение, на базе кодека AV1, ещё лучше
сжимает. - Chroma subsampling (прореживание цветности) — техника, на
которой держится сильное сжатие и JPEG, и WebP. - RIFF — контейнерный формат (от Microsoft, 1991), который
используют WAV-аудио, AVI-видео и WebP-картинки. - Core Web Vitals — метрики Google, по которым ранжируются
сайты; быстрая загрузка картинок прямо влияет на позицию.
Литература и источники
- Официальная страница WebP от Google — https://developers.google.com/speed/webp
- Спецификация формата WebP — https://developers.google.com/speed/webp/docs/riff_container
- Сравнение WebP и JPEG (исследование Google) — искать в Google
по запросу «WebP study Google comparative analysis 2010» - Статья на Wikipedia (en) — https://en.wikipedia.org/wiki/WebP
- Статья на Wikipedia (ru) — https://ru.wikipedia.org/wiki/WebP
- Документация плагина для Chrome/Firefox по преобразованию WebP —
поиск в магазине расширений по слову «WebP»
Где встретилось у меня
Вчера работал над лендингом квартала недвижимости — там много больших
фоновых фотографий и галерея. В коде везде встречались ссылки на
.webp файлы как полноэкранные «героические» картинки и
фото-разделители между секциями. Это типичный кейс: на лендинге
девелопера красивая визуализация важнее всего, а WebP позволяет
сделать так, чтобы эта красота открывалась на телефоне быстро.
Краткое резюме
- WebP — формат изображений от Google (2010), потомок видеокодека VP8.
- В среднем на 25–35% меньше JPEG при том же качестве, на 25% меньше
PNG в lossless-режиме. - Один формат для всего: lossy, lossless, прозрачность, анимация.
- С 2020 года поддерживается всеми современными браузерами, использовать
безопасно. - Главное применение в бизнесе — ускорение веб-страниц и снижение
трафика. Простой способ улучшить и SEO, и конверсию. - Конкуренты — AVIF (лучше, но медленнее) и JPEG XL (технически
идеален, политически мёртв). WebP пока вне конкуренции по
соотношению «качество × поддержка».