Формат WebP
Сучасний формат зображень від Google
Контейнер RIFF
Google не вигадувала для WebP новий контейнер. Вона взяла RIFF, той самий формат, який ще з початку 90-х возить у собі аудіо WAV і відео AVI. Якщо ви колись розбирали файл WAV, то вже знаєте, як WebP влаштований на рівні контейнера.
Формат використовує вкладені чанки з чотирисимвольними ідентифікаторами (їх називають кодами FourCC). Це проста й надійна конструкція, яку перевірив час.
Структура файлу WebP (контейнер RIFF)
Заголовок WebP
| Offset | Hex | ASCII | |||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0000 | 52494646241A00005745425056503858 | RIFF$...WEBPVP8X | |||||||||||||||
| 0010 | 0A00000010000000FF0000FF00000000 | .............. | |||||||||||||||
Будова чанка RIFF
Зверніть увагу: дані чанка за потреби доповнюються нульовим байтом до парної довжини.
Ключові зміщення
- • початок під-чанків: 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 працює як зміст книжки: він каже декодерам, чого чекати у файлі. Коли ми видаляємо чанки з метаданими, ці прапорці теж треба оновити, інакше декодер шукатиме дані, яких уже немає.
Біти прапорців
Чому прапорці важливі
Коли PicScrub видаляє чанки EXIF/XMP, він мусить також оновити прапорці VP8X, щоб ті відображали їхню відсутність. Інакше декодери можуть чекати на дані, яких немає.
Як PicScrub обробляє WebP
Перевіряємо заголовок RIFF
Шукаємо сигнатуру RIFF....WEBP
Розбираємо чанки
Проходимо всі чанки RIFF, читаючи FourCC і розмір
Видаляємо чанки з метаданими
Пропускаємо чанки EXIF і XMP під час запису результату
Оновлюємо прапорці VP8X
Скидаємо біти прапорців EXIF/XMP у чанку VP8X
Перераховуємо розмір файлу
Записуємо в заголовок RIFF новий загальний розмір файлу
Зберігається
- • дані зображення VP8/VP8L
- • альфа-канал ALPH
- • дані анімації ANIM/ANMF
- • колірний профіль ICCP (за бажанням)
Видаляється
- • метадані EXIF
- • метадані XMP
Простий WebP проти розширеного
Якщо у файлі WebP немає чанка VP8X, це «простий» WebP: лише обгортка RIFF навколо одного чанка VP8 або VP8L. У простих файлах WebP метадані неможливі в принципі, тож для тих, хто дбає про приватність, це ідеальний варіант.
Простий WebP
Містить лише чанк VP8 або VP8L. Метадані неможливі.
Розширений WebP
Має чанк VP8X, який вмикає метадані, альфа-канал і анімацію.