emptygif
Idioma: Português

O menor GIF transparente tem 43 bytes.

Isto é tudo. Escolha qualquer byte para ver o que ele faz e depois copie o arquivo, baixe, faça hotlink ou sirva a partir do seu próprio código.

O GIF de 43 bytes, ampliado: um pixel transparente
0000
0010
0020
Baixar 1×1.gif

R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==

O que cada byte faz

Um GIF é uma sequência de blocos. Este tem sete, e cada cor desta página pertence a um deles. Selecione um byte ou um bloco para ler a descrição. Os números são armazenados em little-endian: o byte menos significativo vem primeiro, então 01 00 significa 1.

BytesCampoSignificado
Cabeçalho Informa ao decodificador que isto é um GIF e qual versão do formato esperar.
47 49 46AssinaturaAs letras ASCII “GIF”. Todo arquivo GIF começa com elas.
38 39 61Versão“89a”. A versão 89a é necessária para a transparência; a 87a não tem extensão de controle gráfico.
Descritor de tela lógica O tamanho do canvas e como a tabela de cores dele está configurada.
01 00Largura do canvas1 px.
01 00Altura do canvas1 px.
80Flags compactadasQuatro configurações espremidas em um byte. O bit mais alto indica que uma tabela de cores global vem a seguir; os três últimos bits dão o tamanho dela.
00Índice da cor de fundoEntrada 0 da paleta. Os navegadores ignoram esse valor e mostram o que está atrás da imagem.
00Proporção do pixel0 significa pixels quadrados, sem correção.
Tabela de cores global A paleta. Os pixels guardam um índice desta lista em vez de uma cor.
FF FF FFEntrada da paletaVermelho, verde e azul, um byte cada: #ffffff. Duas entradas é a menor tabela que um GIF pode ter.
00 00 00Entrada da paletaVermelho, verde e azul, um byte cada: #000000. Duas entradas é a menor tabela que um GIF pode ter.
Extensão de controle gráfico Bloco opcional adicionado no GIF89a. Aqui ele torna transparente a entrada 0 da paleta.
21Introdutor de extensão0x21 (“!”) anuncia um bloco de extensão.
F9Rótulo de controle gráfico0xF9 indica que esta extensão é uma extensão de controle gráfico.
04Tamanho do blocoSeguem 4 bytes de configurações.
01Flags compactadasO bit mais baixo é a flag de transparência. Ela está ligada, então o índice transparente abaixo é usado.
00 00Atraso0 centésimos de segundo. Só importa em animações.
00Índice da cor transparenteA entrada 0 da paleta é desenhada totalmente transparente.
00Terminador de blocoUm sub-bloco de comprimento zero que fecha o bloco.
Descritor de imagem Onde a imagem fica no canvas e qual é o tamanho dela.
2CSeparador de imagem0x2C (“,”) inicia uma imagem.
00 00EsquerdaA imagem começa a 0 px da borda esquerda do canvas.
00 00TopoA imagem começa a 0 px da borda superior do canvas.
01 00Largura da imagem1 px.
01 00Altura da imagem1 px.
00Flags compactadasSem tabela de cores local, sem entrelaçamento. A imagem usa a paleta global.
Dados da imagem Os pixels, comprimidos com LZW e divididos em sub-blocos de até 255 bytes.
02Tamanho mínimo de código LZW2, então os códigos comprimidos começam com 3 bits de largura.
02Tamanho do sub-blocoSeguem 2 bytes de dados comprimidos.
44 01Pixels comprimidosCódigos LZW empacotados a partir do bit mais baixo. Veja abaixo como eles são decodificados.
00Terminador de blocoUm sub-bloco de comprimento zero que fecha o bloco.
Marcador de fim Um byte que marca o fim do arquivo.
3BMarcador de fim0x3B (“;”) encerra o arquivo.

Dentro dos bytes compactados

Cada um destes três bytes guarda várias configurações pequenas. O bit 7 é o mais à esquerda.

Descritor de tela lógica 0x80
1Tabela de cores global presente
000Resolução de cor
0Paleta ordenada por importância
000Tamanho da tabela: 2^(n+1) entradas
Extensão de controle gráfico 0x01
000Reservado
000Método de descarte
0Aguardar entrada do usuário
1Transparência ligada
Descritor de imagem 0x00
0Tabela de cores local presente
0Entrelaçado
0Paleta ordenada por importância
00Reservado
000Tamanho da tabela local

Como dois bytes guardam um pixel

Com tamanho mínimo de código 2, o decodificador lê códigos de 3 bits. O código 4 limpa a tabela, o código 5 encerra a imagem e os códigos 0 a 3 são entradas da paleta. Os bytes 44 01 são lidos a partir do bit mais baixo:

0x44 010001000x01 00000001

  1. 001100 = 4Limpar: começar com uma tabela nova
  2. 000000 = 0Pixel: entrada 0 da paleta
  3. 101101 = 5Fim da imagem
  4. 0000000 Bits de preenchimento não usados

Imagens maiores usam o mesmo truque: cada código novo representa uma sequência um pixel mais longa que a anterior, então um GIF transparente de 1000×1000 ocupa só 1.743 bytes.

Dá para ser menor?

Sim, se você remover partes cuja falta os decodificadores toleram. Passamos cada variante por três motores de navegador e pelo Pillow e registramos o que eles desenharam.

TamanhoVarianteChromiumFirefoxWebKitPillow
43O arquivo padrão desta página.TransparenteTransparenteTransparenteTransparente
42Sem byte final. Os decodificadores param no fim dos dados de qualquer forma.TransparenteTransparenteTransparenteTransparente
37Sem paleta nenhuma. Ainda é válido: a especificação permite que os decodificadores usem a própria paleta, e o índice 0 é transparente de qualquer forma.TransparenteTransparenteTransparenteTransparente
36Sem paleta e sem byte final.TransparenteTransparenteTransparenteTransparente
35Sem bloco de transparência: o pixel é desenhado com a cor 0 da paleta, branco.BrancoBrancoBrancoBranco
35O formato de 1987. Ele não tem como marcar uma cor como transparente.BrancoBrancoBrancoBranco
34Bloco de transparência, mas sem pixels comprimidos.TransparenteTransparenteTransparenteErro
33O mesmo, sem o byte final.TransparenteTransparenteTransparenteErro
29Sem paleta e sem transparência. Cada motor escolhe a própria cor.PretoBrancoTransparentePreto
26Uma imagem sem nenhum dado comprimido.TransparenteTransparenteTransparenteErro
14Só cabeçalho, tamanho do canvas e byte final. Não há nenhuma imagem nele.TransparenteErroTransparenteErro

Use os 43 bytes quando precisar funcionar em todo lugar. O de 37 bytes ainda é um GIF válido e ficou transparente em todos os motores que testamos. Abaixo disso, você depende da tolerância do decodificador, e o arquivo de 29 bytes mostra como os motores divergem.

Verificado em 23 de setembro de 2026 com Chromium 153.0.8010.12, Firefox 155.0, WebKit 26.6, Pillow 12.2.0.

Gere um de qualquer tamanho

Transparente ou de cor sólida, de 1×1 até 65535×65535. É gerado no seu navegador; nada é enviado.

Preenchimento
Tamanhos comuns

1×1 · 43 bytes

Baixar GIF

Sirva a partir da sua stack

173 snippets prontos para rodar. Escolha o seu: cada um responde no caminho que você escolher com uma resposta image/gif. Se você mudou o tamanho ou a cor acima, os snippets usam esse GIF.

Elixir, Erlang & Gleam

Express JavaScript

Instalar
npm i express
Arquivo
server.mjs
Executar
node server.mjs
import express from 'express';

const GIF = Buffer.from('R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==', 'base64');

const app = express();

app.get('/pixel.gif', (req, res) => {
  res.set('Cache-Control', 'no-store');
  res.type('gif').send(GIF);
});

app.listen(8080);

Executamos este snippet e comparamos os bytes que ele retornou. Abrir página

Para que serve

  • Pixels de rastreamento e beacons: o servidor registra a requisição e responde com a menor imagem válida.
  • Placeholders para imagens com lazy loading, para que a tag img seja válida antes de a fonte real chegar.
  • Espaçadores de tamanho fixo em e-mails HTML, onde o suporte a CSS é irregular.
  • Testes e mocks que precisam de uma imagem real sem incluir uma.

Pixels de rastreamento são menos confiáveis do que parecem

O Apple Mail pré-carrega imagens remotas por meio de um proxy quando a Proteção de Privacidade do Mail está ativada, então uma “abertura” pode nunca ter sido uma pessoa. O Gmail também busca as imagens pelo próprio proxy e as armazena em cache. Muitos clientes bloqueiam imagens remotas por padrão. Para analytics de páginas, navigator.sendBeacon() ou uma resposta 204 No Content costuma ser uma opção melhor que uma imagem.

Perguntas frequentes

Por que se chama vazio se tem um pixel?
Um GIF precisa ter pelo menos um pixel. Este tem 1×1 e a única cor dele está marcada como transparente, então nada aparece.
O arquivo de 43 bytes é válido?
Sim. Ele segue exatamente a especificação GIF89a, e todos os motores da tabela acima o desenham transparente.
Por que GIF e não PNG ou WebP?
É menor que um PNG transparente mínimo, e qualquer navegador, cliente de e-mail ou biblioteca de imagens dos últimos 35 anos consegue lê-lo.
Devo usar um data URI ou um arquivo?
Um data URI economiza uma requisição e serve bem para placeholders e CSS. Um arquivo ou endpoint é necessário quando a própria requisição é o objetivo, como nos pixels de rastreamento.
Qual Content-Type devo enviar?
image/gif. Adicione Cache-Control: no-store se toda requisição precisar chegar ao seu servidor.