O que é um GIF entrelaçado?

Um GIF entrelaçado armazena as linhas da imagem em quatro passagens, em vez de sequencialmente. Assim, um decodificador pode mostrar uma versão aproximada da imagem completa antes que cheguem dados suficientes para renderizar todas as linhas.

Como funcionam os GIFs entrelaçados

O entrelaçamento de GIF altera apenas a ordem em que as linhas de um quadro entram nos dados de imagem comprimidos com LZW. A primeira passagem cobre toda a altura de forma esparsa, e as passagens seguintes preenchem as lacunas. A prévia resultante é um comportamento do decodificador, não algo que o formato determina: GIF89a define a ordem das linhas, e um decodificador pode desenhá-las à medida que chegam. O filtro de desentrelaçamento do Firefox, por exemplo, copia cada linha recebida para as linhas vizinhas que ainda não chegaram quando a exibição progressiva está ativada. A tabela de cores, as dimensões, as regras de transparência e os pixels finais são os mesmos do armazenamento sequencial. As bibliotecas diferem quanto a qual componente desfaz a reordenação: na giflib, DGifSlurp posiciona as linhas de um quadro entrelaçado em suas posições finais usando os deslocamentos das quatro passagens, chamando o leitor de linhas uma vez por linha, na ordem de armazenamento.

Informações essenciais

  1. Em que ordem as linhas são armazenadas? A passagem 1 contém uma linha a cada 8 linhas, começando pela linha 0; a passagem 2, uma linha a cada 8 linhas, começando pela linha 4; a passagem 3, uma linha a cada 4 linhas, começando pela linha 2; e a passagem 4, uma linha a cada 2 linhas, começando pela linha 1. GIF89a fixa esse padrão, de modo que um decodificador tem cerca de um oitavo das linhas após a passagem 1, um quarto após a passagem 2 e metade após a passagem 3 (exatamente essas proporções quando a altura é múltipla de 8). Quadros baixos deixam passagens vazias: com quatro linhas ou menos, não há linha da passagem 2, e um quadro de uma linha tem apenas a passagem 1. Um desentrelaçador precisa comparar a linha inicial de cada passagem com a altura do quadro antes de copiar uma linha: um relato público de bug no decodificador GIF do APNG4Android descreve uma escrita além dos limites do buffer de saída em um quadro entrelaçado de duas linhas porque o decodificador copiou primeiro uma linha da passagem 2.
  2. Como saber se um GIF é entrelaçado? A verificação é por quadro, não por arquivo. O sinalizador de entrelaçamento é um bit no byte de campos compactados de cada descritor de imagem (a giflib o testa com a máscara 0x40), e cada imagem no fluxo de dados tem seu próprio descritor, de modo que os quadros de uma animação podem diferir. As ferramentas nem sempre expõem o sinalizador: um usuário do libvips solicitou um campo de entrelaçamento na saída do cabeçalho GIF depois que gifsave passou a oferecer a opção interlace.
  3. O entrelaçamento acrescenta algo além da prévia? Não. As linhas reordenadas continuam sendo índices na tabela de cores ativa, comprimidos com LZW, e a transparência continua sendo o único índice indicado na extensão de controle gráfico. O entrelaçamento não acrescenta cores nem transparência parcial.
  4. Minhas ferramentas gravarão GIFs entrelaçados sem que eu peça? Algumas sim, e não em todos os caminhos de execução do código. O manual do Pillow diz que sua opção de salvamento interlace fica ativada por padrão, a menos que a imagem tenha menos de 16 pixels de largura ou altura. No código-fonte do Pillow (versão 12.0.0 e branch main consultado em outubro de 2026), apenas o gravador de quadro único aplica essa opção: passar interlace=False nesse caso a desativa, enquanto os quadros gravados por um salvamento de múltiplos quadros (save_all produzindo mais de um quadro) sempre recebem o sinalizador de entrelaçamento desativado e linhas sequenciais. O Gifsicle deixa a decisão para quem o chama: --interlace ativa o entrelaçamento, e --same-interlace mantém a configuração existente de cada entrada. Defina a opção explicitamente quando um consumidor posterior esperar uma disposição específica e leia o sinalizador dos quadros que você gravou em vez de deduzi-lo a partir do padrão.

Quando os GIFs entrelaçados são relevantes

O entrelaçamento é relevante em dois contextos. Na entrega, ele altera a ordem em que as linhas chegam, o que permite a um decodificador mostrar uma versão aproximada do quadro inteiro logo no início. Trata-se de uma ordem de linhas, não de uma configuração de compressão, mas são as linhas reordenadas que o LZW comprime, então não há garantia de que o tamanho após a codificação seja igual ao da codificação sequencial. GIF89a não diz como o entrelaçamento afeta o tamanho, por isso compare os dois resultados em vez de supor que sejam iguais ou que um seja menor. No processamento, arquivos entrelaçados continuam sendo produzidos, já que o Pillow entrelaça GIFs de quadro único por padrão ao salvá-los, então qualquer código que leia dados de imagem GIF linha por linha precisa recolocar as linhas em ordem antes de recortar, redimensionar ou converter um quadro.

Fontes

Transforme conhecimento sobre mídia em um pipeline funcional

Conecte uploads, processamento, IA, armazenamento e entrega por meio de uma única API declarativa, com o stack de codificação, o ajuste de escala e as constantes mudanças de formatos gerenciados para você.

Experimente a Transloadit gratuitamente