Формат WebP
WebP — это контейнер RIFF, внутри которого лежит один из двух разных кодеков: VP8 сжимает с потерями, как видеокадр, а VP8L — без потерь, отдельным алгоритмом с предсказанием и локальными палитрами. Прозрачность работает в обоих режимах, анимация тоже поддерживается. Сторона картинки не может превышать 16 383 пикселя. В PDF-документе места для WebP нет: там просто не существует фильтра, который умел бы его читать.
Обновлено:
Коротко о цифрах
- Контейнер
- RIFF; кодеки VP8 (с потерями) и VP8L (без потерь)
- Прозрачность
- поддерживается в обоих режимах, отдельным чанком ALPH
- Предел размера
- 16 383 пикселя по каждой стороне
- Фильтр в PDF
- отсутствует — файл перекодируется в JPEG, а с прозрачностью в PNG
- У нас на выходе
- компрессор изображений пишет WebP и JPEG, больше ничего
Два режима под одним расширением
Файлы с одинаковым расширением .webp внутри устроены по-разному. Режим с потерями заимствован у видеокодека VP8: кадр делится на макроблоки, каждый предсказывается по соседям, а разница кодируется грубее — примерно так же, как это делает JPEG, только с более умным предсказанием и без жёсткой сетки 8×8. На фотографии это даёт заметно меньший вес при том же визуальном качестве.
Режим без потерь — совсем другой алгоритм: он подбирает для участков картинки локальные цветовые палитры, предсказывает пиксель по нескольким соседям сразу и дожимает результат энтропийным кодированием. Для скриншотов и графики он обычно обходит PNG. Понять, какой режим внутри вашего файла, по расширению нельзя — только по содержимому.
Что происходит при вставке в PDF
- В спецификации PDF нет фильтра для VP8 и VP8L, поэтому положить файл в документ потоком, как JPEG или PNG, невозможно.
- Наш конвертер поступает единственным доступным способом: браузер декодирует WebP, картинка рисуется на канвасе и кодируется заново — в JPEG с качеством 0,9, а если в ней есть прозрачность, в PNG.
- WebP с прозрачностью уходит в PNG, и это честный размен: пиксели и прозрачность те же, другая только упаковка.
- WebP без прозрачности получает ещё одно поколение сжатия с потерями: на фотографии этого почти не видно, а вот скриншот или схема в WebP без потерь станут JPEG с ореолами вокруг линий — такие картинки лучше заранее пересохранить в PNG.
- Хотите управлять весом PDF из WebP-фотографий — сначала пересохраните их в JPEG нашим компрессором изображений с нужным качеством: JPEG ляжет в документ байт в байт, без второго кодирования.
Где WebP поддержан у нас
- Сжатие изображений принимает WebP на вход и умеет отдавать WebP на выходе — это один из двух форматов, в которые компрессор вообще пишет.
- Обрезка изображений тоже принимает WebP: рамка выделения строится по развёрнутой копии картинки, а не по сырым пикселям файла.
- Сборка PDF принимает WebP, но кладёт его в документ уже как JPEG или, при прозрачности, PNG — см. предыдущий раздел.
- Если браузер не умеет кодировать WebP на канвасе, инструмент не отдаёт молча PNG под чужим расширением, а отказывается: canvas.toBlob при неизвестном типе подсовывает PNG, и мы сверяем полученный MIME-тип с запрошенным.
Частые вопросы
Почему PDF из WebP-снимков получился в разы тяжелее исходных файлов?
Потому что в документ ушёл не WebP, а PNG без потерь: фильтра для WebP в PDF не существует. Пересохраните снимки в JPEG перед сборкой, и вес вернётся к ожидаемому.
Чем открыть файл .webp на компьютере?
Любым современным браузером: перетащите файл в окно. Windows и macOS показывают WebP штатно уже несколько лет. Для редактирования проще пересохранить картинку в JPEG или PNG.
WebP правда легче JPEG?
На фотографиях при равном визуальном качестве обычно да, примерно на четверть. Но выигрыш зависит от снимка: на мелкой контрастной графике разница почти исчезает, а иногда JPEG оказывается компактнее.
Сохранится ли прозрачность, если сжать WebP в JPEG?
Нет. JPEG не хранит альфа-канал, поэтому перед кодированием под картинку подкладывается белый фон. Хотите сохранить прозрачность — выбирайте на выходе WebP, а не JPEG.