Formato GIF
Graphics Interchange Format
Estrutura em blocos
O GIF é um daqueles formatos que sobreviveram décadas além do esperado. Criado pela CompuServe em 1987, ele continua em todo lugar até hoje, principalmente por causa do suporte a animações.
O formato usa uma estrutura em blocos que é refrescantemente simples perto dos formatos modernos. Um cabeçalho, alguns descritores, uma tabela de cores, os dados da imagem e um byte de encerramento para dizer "fim".
Estrutura do arquivo GIF
Cabeçalho do GIF
| Offset | Hex | ASCII | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0000 | 4749463839618002E001F70000 | GIF89a....... | ||||||||||||
Diferenças entre as versões
Especificação original. Sem blocos de extensão.
Acrescentou extensões, animação e transparência.
Blocos de extensão
O GIF89a (a revisão de 1989) acrescentou os blocos de extensão, e foi assim que o GIF ganhou suporte a animação. Todos os blocos de extensão começam com 0x21, seguido de um byte de tipo, o que facilita identificá-los ao percorrer o arquivo. Alguns queremos manter (o controle da animação), outros queremos remover (os comentários).
Graphic Control Extension (0xF9)
Controla o tempo da animação, a transparência e o método de descarte. Vem antes de cada descritor de imagem nos GIFs animados. Sempre preservado.
Comment Extension (0xFE)
Comentários em texto puro. Podem conter qualquer informação, inclusive autor, data de criação, software ou anotações pessoais. Removido pelo PicScrub.
Application Extension (0xFF)
Dados específicos de cada aplicativo. O mais importante é o NETSCAPE2.0, que controla a repetição da animação. Também pode conter metadados XMP.
Plain Text Extension (0x01)
Raramente usado. Renderiza texto com a tabela de cores do GIF. Praticamente ignorado pelos programas modernos.
Extensões de aplicativo
NETSCAPE2.0:repetição da animação
Controla quantas vezes um GIF animado se repete. O valor 0 significa repetição infinita.
| Offset | Hex | ASCII | ||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0000 | 21FF0B4E45545343415045322E300301000000 | !..NETSCAPE2.0..... | ||||||||||||||||||
O PicScrub preserva o NETSCAPE2.0 para manter o comportamento da animação.
XMP Data:Extensible Metadata Platform
Identificador do aplicativo: XMP DataXMP. Contém os metadados XMP/RDF completos em formato XML.
O PicScrub remove as extensões de aplicativo do tipo XMP.
Preservação da animação
O complicado no GIF é distinguir os dados de animação (que precisamos manter) dos metadados (que queremos remover). Os dois ficam em blocos de extensão, então não dá simplesmente para eliminar todas as extensões.
Preservado para a animação
- • Contagem de repetições NETSCAPE2.0
- • Graphic Control Extensions
- • Intervalos entre quadros
- • Métodos de descarte
- • Índices de transparência
- • Tabelas locais de cores
Removido
- • Extensões de comentário
- • Blocos de aplicativo XMP
- • Blocos de aplicativo desconhecidos
- • Extensões de texto puro
Como o PicScrub processa o GIF
Validar o cabeçalho
Conferir a assinatura GIF87a ou GIF89a
Copiar os dados do cabeçalho
Preservar o LSD e a tabela global de cores sem alterações
Filtrar as extensões
Manter NETSCAPE2.0 e Graphic Control, remover comentários e XMP
Preservar os dados da imagem
Copiar todos os descritores de imagem, LCTs e dados LZW sem alterações
Gravar o terminador
Encerrar o arquivo com o byte terminador 0x3B
Compressão LZW
Uma observação rápida sobre os dados de imagem do GIF: eles usam compressão LZW, que foi patenteada até 2004 (o que causou uma baita confusão nos anos 1990). O PicScrub não toca nos dados comprimidos. Copiamos tudo byte a byte, então não há nenhuma perda de qualidade.
Por que isso importa
Ao preservar os dados LZW originais, o PicScrub garante:
- • Nenhuma perda de qualidade (imagem preservada bit a bit)
- • Processamento rápido (sem ciclo de decodificação e recodificação)
- • Tamanho idêntico para os dados da imagem
Limites dos metadados no GIF
A boa notícia sobre o GIF é que ele é anterior ao padrão EXIF, então não há coordenadas GPS nem dados de câmera para se preocupar. As questões de metadados aqui são mais banais.
O que pode vazar
Os riscos de privacidade do GIF são pequenos perto dos do JPEG:
- • Extensões de comentário (às vezes com anotações do autor)
- • Metadados XMP (raros, mas possíveis)
- • Identificação do software nos blocos de aplicativo