PicScrub logoPicScrub
Voltar para os formatos

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

Header
LSD
GCT
Extensions
Image Data
Trailer
Header
6 bytes
GIF87a ou GIF89a
LSD
7 bytes
Descritor lógico da tela
GCT
768 bytes
Tabela global de cores (opcional)
Extensions
100 bytes
Blocos de extensão (metadados)
Image Data
Tamanho variável
Descritor da imagem + dados LZW
Trailer
1 bytes
Terminador 0x3B

Cabeçalho do GIF

Assinatura GIF
Versão (89a)
Largura (640)
Altura (480)
Campos compactados
Índice da cor de fundo
Proporção do pixel
OffsetHexASCII
0000
4749463839618002E001F70000
GIF89a.......

Diferenças entre as versões

GIF87a

Especificação original. Sem blocos de extensão.

GIF89a

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.

21 F9 04 [descarte] [atraso] [transparência] 00

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.

21 FE [tamanho] [dados do comentário...] 00

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.

21 FF 0B [identificador do app] [código de autenticação] [dados...] 00

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.

Introdução da extensão
Tamanho do bloco (11)
NETSCAPE2.0
Tamanho do sub-bloco
ID do sub-bloco
Contagem de repetições
Terminador
OffsetHexASCII
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

1

Validar o cabeçalho

Conferir a assinatura GIF87a ou GIF89a

2

Copiar os dados do cabeçalho

Preservar o LSD e a tabela global de cores sem alterações

3

Filtrar as extensões

Manter NETSCAPE2.0 e Graphic Control, remover comentários e XMP

4

Preservar os dados da imagem

Copiar todos os descritores de imagem, LCTs e dados LZW sem alterações

5

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