PicScrub logoPicScrub
Voltar para os formatos

Formato WebP

O formato de imagem moderno do Google

Contêiner RIFF

O Google não inventou um contêiner novo para o WebP. Optou pelo RIFF, o mesmo formato que carrega áudio WAV e vídeo AVI desde o começo dos anos 1990. Se você já analisou um arquivo WAV, já sabe como o WebP funciona no nível do contêiner.

O formato usa blocos aninhados com identificadores de 4 caracteres (os chamados códigos FourCC). É um desenho simples e robusto, que resistiu bem à passagem do tempo.

Estrutura do arquivo WebP (contêiner RIFF)

RIFF
Size
WEBP
VP8X
EXIF/XMP
VP8/VP8L
RIFF
4 bytes
Assinatura do contêiner
Size
4 bytes
Tamanho do arquivo - 8
WEBP
4 bytes
Identificador do formato
VP8X
18 bytes
Flags de recursos estendidos
EXIF/XMP
100 bytes
Blocos de metadados
VP8/VP8L
Tamanho variável
Dados da imagem

Cabeçalho do WebP

Assinatura RIFF
Tamanho do arquivo - 8
Identificador WEBP
Tipo do bloco VP8X
Tamanho do VP8X (10)
Flags do VP8X
Tamanho da tela
OffsetHexASCII
0000
52494646241A00005745425056503858
RIFF$...WEBPVP8X
0010
0A00000010000000FF0000FF00000000
..............

Estrutura de um bloco RIFF

FourCCTamanhoDados
4 bytes4 bytes (LE)Variável

Observação: os dados do bloco são preenchidos até um tamanho par com um byte nulo, quando necessário.

Offsets importantes

  • • Início dos sub-blocos: 12 bytes (depois de RIFF + tamanho + WEBP)
  • • Cabeçalho do bloco: 8 bytes (FourCC de 4 bytes + tamanho de 4 bytes)
  • • Offset do campo de tamanho: +4 a partir do início do bloco (little-endian)

Blocos de imagem

O WebP é, na prática, três formatos em um: com perdas (VP8), sem perdas (VP8L) e estendido (VP8X). O tipo do bloco indica qual método de compressão foi usado.

VP8:compressão com perdas

Usa o codec de vídeo VP8 para comprimir. Relação qualidade/tamanho parecida com a do JPEG. Arquivos WebP simples contêm apenas este bloco.

VP8L:compressão sem perdas

Compressão sem perdas com predição, transformação de cor e codificação de entropia. Costuma ficar de 25% a 34% menor que o PNG.

VP8X:formato estendido

Indica a presença de recursos opcionais: animação, canal alfa, perfil ICC, EXIF ou XMP. Obrigatório sempre que algum desses recursos existe.

ALPH:canal alfa

Dados do canal alfa separados. Podem ser comprimidos com ou sem perdas, independentemente dos dados de cor.

ANIM/ANMF:animação

O ANIM contém os parâmetros globais da animação. Os blocos ANMF contêm cada quadro, com as informações de tempo.

Blocos de metadados

Diferentemente dos arquivos WebP simples, que contêm apenas dados de imagem, os arquivos WebP estendidos podem carregar metadados. A boa notícia é que esses blocos ficam bem separados dos dados da imagem, o que facilita identificá-los e removê-los.

EXIF:metadados EXIF

Contém dados EXIF no mesmo formato do JPEG (estrutura TIFF bruta). Inclui dados da câmera, coordenadas GPS, carimbos de data/hora e miniaturas. É a principal preocupação de privacidade.

XMP:metadados XMP

Metadados em XML. Podem duplicar os dados EXIF e ainda incluir histórico de edição, informações do software e campos personalizados.

ICCP:perfil de cor ICC

Perfil de cor ICC para gerenciamento de cor. O PicScrub preserva por padrão, para manter a fidelidade das cores.

Flags do VP8X

O bloco VP8X funciona como um índice, avisando ao decodificador o que esperar do arquivo. Quando removemos os blocos de metadados, precisamos também atualizar essas flags; caso contrário, o decodificador vai procurar dados que não estão mais lá.

Bits das flags

Bit 0Reservado (precisa ser 0)
Bit 1Flag de animação
Bit 2Metadados XMP presentes
Bit 3Metadados EXIF presentes
Bit 4Canal alfa presente
Bit 5Perfil ICC presente

Por que as flags importam

Quando o PicScrub remove os blocos EXIF/XMP, ele também precisa atualizar as flags do VP8X para refletir essa ausência. Caso contrário, os decodificadores podem esperar dados que não existem mais.

Como o PicScrub processa o WebP

1

Validar o cabeçalho RIFF

Conferir a assinatura RIFF....WEBP

2

Analisar os blocos

Percorrer todos os blocos RIFF, lendo o FourCC e o tamanho

3

Remover os blocos de metadados

Pular os blocos EXIF e XMP na hora de gravar a saída

4

Atualizar as flags do VP8X

Zerar os bits das flags de EXIF/XMP no bloco VP8X

5

Recalcular o tamanho do arquivo

Atualizar o cabeçalho RIFF com o novo tamanho total do arquivo

Preservado

  • • Dados de imagem VP8/VP8L
  • • Canal alfa ALPH
  • • Dados de animação ANIM/ANMF
  • • Perfil de cor ICCP (opcional)

Removido

  • • Metadados EXIF
  • • Metadados XMP

WebP simples x WebP estendido

Se um arquivo WebP não tem bloco VP8X, ele é um WebP "simples": apenas o invólucro RIFF em volta de um único bloco VP8 ou VP8L. Não é possível gravar metadados em arquivos WebP simples, então, se você se preocupa com privacidade, eles são ideais.

WebP simples

Contém apenas o bloco VP8 ou VP8L. Não admite metadados.

RIFF + WEBP + VP8/VP8L

WebP estendido

Tem bloco VP8X, o que habilita metadados, canal alfa e animação.

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