PicScrub logoPicScrub
Повернутися до форматів

Формат WebP

Сучасний формат зображень від Google

Контейнер RIFF

Google не вигадувала для WebP новий контейнер. Вона взяла RIFF, той самий формат, який ще з початку 90-х возить у собі аудіо WAV і відео AVI. Якщо ви колись розбирали файл WAV, то вже знаєте, як WebP влаштований на рівні контейнера.

Формат використовує вкладені чанки з чотирисимвольними ідентифікаторами (їх називають кодами FourCC). Це проста й надійна конструкція, яку перевірив час.

Структура файлу WebP (контейнер RIFF)

RIFF
Size
WEBP
VP8X
EXIF/XMP
VP8/VP8L
RIFF
4 байт
Сигнатура контейнера
Size
4 байт
Розмір файлу мінус 8
WEBP
4 байт
Ідентифікатор формату
VP8X
18 байт
Прапорці розширених можливостей
EXIF/XMP
100 байт
Чанки з метаданими
VP8/VP8L
Змінна довжина
Дані зображення

Заголовок WebP

Сигнатура RIFF
Розмір файлу мінус 8
Ідентифікатор WEBP
Тип чанка VP8X
Розмір VP8X (10)
Прапорці VP8X
Розмір полотна
OffsetHexASCII
0000
52494646241A00005745425056503858
RIFF$...WEBPVP8X
0010
0A00000010000000FF0000FF00000000
..............

Будова чанка RIFF

FourCCSizeData
4 байти4 байти (LE)Змінна

Зверніть увагу: дані чанка за потреби доповнюються нульовим байтом до парної довжини.

Ключові зміщення

  • • початок під-чанків: 12 байтів (після RIFF + розмір + WEBP)
  • • заголовок чанка: 8 байтів (4 байти FourCC + 4 байти розміру)
  • • поле розміру: +4 від початку чанка (little-endian)

Чанки із зображенням

WebP насправді є трьома форматами в одному: з втратами (VP8), без втрат (VP8L) і розширеним (VP8X). Тип чанка каже, який саме метод стиснення застосовано.

VP8:стиснення з втратами

Стискає за допомогою відеокодека VP8. Співвідношення якості й розміру подібне до JPEG. Прості файли WebP містять лише цей чанк.

VP8L:стиснення без втрат

Стиснення без втрат із передбаченням, колірним перетворенням та ентропійним кодуванням. Зазвичай на 25-34 % менше за PNG.

VP8X:розширений формат

Вказує на наявність додаткових можливостей: анімації, альфа-каналу, профілю ICC, EXIF чи XMP. Обовʼязковий, якщо є хоч щось із цього.

ALPH:альфа-канал

Дані окремого альфа-каналу. Можуть стискатися з втратами або без них, незалежно від даних кольору.

ANIM/ANMF:анімація

ANIM містить загальні параметри анімації. Чанки ANMF містять окремі кадри разом із даними про тривалість.

Чанки з метаданими

На відміну від простих файлів WebP, які містять лише дані зображення, розширені файли WebP можуть нести метадані. Добра новина в тому, що ці чанки чітко відділені від даних зображення, тож їх легко знайти й видалити.

EXIF:метадані EXIF

Містить дані EXIF у тому самому форматі, що й JPEG (сира структура TIFF). Це дані про камеру, GPS-координати, дата й час, а також мініатюри. Головна загроза приватності.

XMP:метадані XMP

Метадані на основі XML. Можуть дублювати дані EXIF, а на додачу містити історію редагування, дані про програму та власні поля.

ICCP:колірний профіль ICC

Колірний профіль ICC для керування кольором. PicScrub зберігає його за замовчуванням, щоб кольори лишалися точними.

Прапорці VP8X

Чанк VP8X працює як зміст книжки: він каже декодерам, чого чекати у файлі. Коли ми видаляємо чанки з метаданими, ці прапорці теж треба оновити, інакше декодер шукатиме дані, яких уже немає.

Біти прапорців

Біт 0Зарезервований (має бути 0)
Біт 1Прапорець анімації
Біт 2Наявні метадані XMP
Біт 3Наявні метадані EXIF
Біт 4Наявний альфа-канал
Біт 5Наявний профіль ICC

Чому прапорці важливі

Коли PicScrub видаляє чанки EXIF/XMP, він мусить також оновити прапорці VP8X, щоб ті відображали їхню відсутність. Інакше декодери можуть чекати на дані, яких немає.

Як PicScrub обробляє WebP

1

Перевіряємо заголовок RIFF

Шукаємо сигнатуру RIFF....WEBP

2

Розбираємо чанки

Проходимо всі чанки RIFF, читаючи FourCC і розмір

3

Видаляємо чанки з метаданими

Пропускаємо чанки EXIF і XMP під час запису результату

4

Оновлюємо прапорці VP8X

Скидаємо біти прапорців EXIF/XMP у чанку VP8X

5

Перераховуємо розмір файлу

Записуємо в заголовок RIFF новий загальний розмір файлу

Зберігається

  • • дані зображення VP8/VP8L
  • • альфа-канал ALPH
  • • дані анімації ANIM/ANMF
  • • колірний профіль ICCP (за бажанням)

Видаляється

  • • метадані EXIF
  • • метадані XMP

Простий WebP проти розширеного

Якщо у файлі WebP немає чанка VP8X, це «простий» WebP: лише обгортка RIFF навколо одного чанка VP8 або VP8L. У простих файлах WebP метадані неможливі в принципі, тож для тих, хто дбає про приватність, це ідеальний варіант.

Простий WebP

Містить лише чанк VP8 або VP8L. Метадані неможливі.

RIFF + WEBP + VP8/VP8L

Розширений WebP

Має чанк VP8X, який вмикає метадані, альфа-канал і анімацію.

RIFF + WEBP + VP8X + [ICCP] + [ANIM] + [EXIF] + [XMP] + VP8/VP8L