Como reduzir o tamanho de um PNG: 5 formas
- Diminua as dimensões. O tamanho do arquivo acompanha a quantidade de pixels; reduzir a largura e a altura pela metade deixa cerca de um quarto dos dados.
- Reduza as cores para uma paleta de 8 bits. Ferramentas como o pngquant costumam cortar de 60 a 80%, com pouca mudança visível em gráficos.
- Remova os metadados. Blocos de texto, perfis ICC e dados de editores podem somar centenas de kilobytes.
- Use a compressão máxima. O nível 9 com filtragem adaptativa economiza alguns por cento a mais, sem perda de qualidade.
- Converta fotos para JPG. Se o PNG é uma fotografia e você não precisa de transparência, o JPG costuma ser de 5 a 10 vezes menor.
A compressão PNG é fundamentalmente sem perdas
Este é o ponto mais importante para entender o PNG: o nível de compressão não afeta a qualidade. Um PNG salvo com nível de compressão 1 e um PNG salvo com nível 9 produzem exatamente a mesma imagem quando abertos. Cada pixel será idêntico, bit a bit.
O PNG usa o algoritmo DEFLATE (o mesmo do gzip e dos arquivos ZIP) para comprimir os dados de pixels. Ao ajustar o "nível" de compressão, você controla o quanto o codificador se esforça para encontrar padrões repetidos e as melhores estratégias de codificação. Níveis mais altos significam:
- Arquivos menores — o codificador encontra formas mais eficientes de representar os mesmos dados
- Codificação mais lenta — é preciso mais processamento para encontrar essas eficiências
- Descompressão idêntica — seja qual for o nível, os pixels decodificados são os mesmos
Isso é fundamentalmente diferente do JPEG, em que a configuração de qualidade controla diretamente quantos dados visuais são descartados de forma permanente. No PNG, nada é descartado. A questão da "qualidade" é simplesmente: quanto tempo de CPU você está disposto a gastar para economizar mais alguns bytes?
Conceito-chave: nível de compressão PNG = esforço de codificação, não qualidade. Nível 9 não significa "qualidade inferior" — significa "esforçar-se mais para encontrar uma representação menor dos mesmos dados".
PNG-8 vs PNG-24 vs PNG-32
A forma mais eficaz de reduzir o tamanho de um PNG é escolher o subtipo de PNG certo para a imagem. A diferença entre esses tipos pode significar uma redução de 3 a 5 vezes no tamanho, com mudança visível mínima ou nenhuma.
| Tipo | Profundidade de cor | Cores | Transparência | Tamanho típico |
|---|---|---|---|---|
| PNG-8 | 8 bits (paleta indexada) | Até 256 | 1 bit (liga/desliga) ou alfa de 8 bits | Menor |
| PNG-24 | 24 bits (RGB) | 16,7 milhões | Nenhuma | Médio |
| PNG-32 | 32 bits (RGBA) | 16,7 milhões | Alfa completo de 8 bits | Maior |
PNG-8: a arma secreta para arquivos pequenos
O PNG-8 armazena cada pixel como um índice em uma paleta de até 256 cores. Em vez de usar 3 bytes por pixel (RGB) ou 4 bytes (RGBA), usa apenas 1 byte. Essa diferença fundamental deixa os arquivos PNG-8 3 a 5 vezes menores que os equivalentes em PNG-24.
O PNG-8 é ideal para:
- Logotipos — a maioria dos logotipos usa menos de 20 cores
- Ícones e elementos de interface — ícones de design plano costumam ter de 5 a 15 cores
- Ilustrações simples — diagramas, gráficos e infográficos com áreas de cor chapada
- Capturas de tela de interfaces com muito texto — saídas de terminal, editores de código, documentos de texto
O PNG-8 não é adequado para:
- Fotografias — fotos contêm milhares de cores; reduzir para 256 causa faixas visíveis (banding)
- Degradês suaves — 256 cores não conseguem representar um degradê suave sem degraus visíveis
- Imagens que exigem semitransparência — o PNG-8 pode armazenar um valor alfa para cada cor da paleta, mas bordas suaves e sombras costumam precisar de mais combinações de cor e alfa do que as 256 entradas permitem
PNG-24 vs PNG-32: você precisa do canal alfa?
A diferença entre PNG-24 e PNG-32 é o canal alfa (transparência). Cada pixel no PNG-32 carrega um byte extra de transparência, o que deixa os arquivos 25 a 33% maiores que no PNG-24. Se a imagem não precisa de transparência (sem áreas transparentes ou semitransparentes), salve como PNG-24 para evitar o peso de um canal alfa sem uso.
Ganho rápido: se você tem uma imagem PNG-24 que usa apenas 50 cores distintas (comum em mockups de interface e diagramas), converter para PNG-8 pode reduzir o tamanho do arquivo em 70 a 80% sem nenhuma mudança visível. Ferramentas como o pngquant detectam isso automaticamente.
Remoção de metadados
Arquivos PNG podem conter metadados em blocos de texto: tEXt, iTXt, zTXt e outros blocos auxiliares. Eles incluem:
- Tags de software — qual programa criou o arquivo (Photoshop, GIMP etc.)
- Data de criação — quando a imagem foi criada ou modificada pela última vez
- Autor e direitos autorais — campos de texto incorporados
- Perfil de cor ICC — pode ter de 500 bytes a mais de 800 KB em perfis de gama ampla
- Dados privados do Photoshop — os programas da Adobe incorporam dados de camadas, referências a objetos inteligentes e histórico de edição que podem ser volumosos
Para entrega na web, todos esses metadados são peso desnecessário. Removê-los gera um arquivo menor com nenhuma mudança visual:
# Remover todos os metadados com o ImageMagick
magick input.png -strip output.png
# Remover com o pngcrush (preserva apenas os blocos críticos)
pngcrush -rem allb input.png output.png
# Remover com o optipng (também otimiza a compressão)
optipng -strip all input.png -out output.png
A economia com a remoção de metadados costuma ser de 1 a 5 KB em imagens simples, mas pode chegar a 50 a 800 KB em arquivos exportados do Photoshop com perfis ICC incorporados e blocos de dados privados.
Configurações de nível de compressão
O nível de compressão do PNG controla a intensidade com que o algoritmo DEFLATE procura padrões. Veja o que cada nível significa na prática:
| Nível | Velocidade de codificação | Tamanho do arquivo | Uso |
|---|---|---|---|
| 0 | Instantânea | Maior (sem compressão) | Depuração, processamento intermediário |
| 1–3 | Muito rápida | Grande | Processamento em tempo real, arquivos temporários |
| 4–6 | Moderada | Médio | Uso geral (a maioria das ferramentas usa 6 por padrão) |
| 7–8 | Lenta | Pequeno | Entrega na web, arquivamento |
| 9 | A mais lenta | Menor | Entrega final, recursos para a web |
A diferença entre o nível 6 (padrão) e o nível 9 (máximo) costuma ser de 2 a 5% no tamanho do arquivo. A diferença no tempo de codificação é maior — o nível 9 pode levar de 5 a 10 vezes mais que o nível 6 em imagens grandes. Para recursos da web, que você codifica uma vez e serve milhões de vezes, o nível 9 sempre compensa o tempo extra.
Parâmetro de qualidade PNG do ImageMagick
O ImageMagick codifica tanto o nível de compressão quanto o tipo de filtro em um único parâmetro -quality para PNG. O dígito das dezenas é o nível de compressão zlib (0 a 9) e o das unidades é o tipo de filtro (0 a 5):
# Compressão máxima, filtragem adaptativa
magick input.png -strip -quality 95 PNG:output.png
# Decomposição: 9 = nível de compressão 9, 5 = filtro adaptativo
# O filtro adaptativo testa os 5 tipos de filtro em cada linha para o melhor resultado
# Compressão rápida, sem filtragem
magick input.png -strip -quality 10 PNG:output.png
# Decomposição: 1 = nível de compressão 1, 0 = sem filtro
Melhor padrão: use -quality 95 na saída PNG do ImageMagick. O 9 significa esforço máximo de compressão e o 5 significa filtragem adaptativa (testa todos os tipos de filtro em cada linha). Isso produz o menor arquivo, ao custo de uma codificação mais lenta.
Tipos de filtro PNG explicados
Antes da compressão DEFLATE, o PNG aplica a cada linha um filtro de predição que transforma os dados de pixels para torná-los mais compressíveis. O filtro não altera a imagem — é totalmente reversível. O objetivo é deixar os dados mais repetitivos para que o DEFLATE consiga comprimi-los melhor.
| Filtro | ID | Método de predição | Melhor para |
|---|---|---|---|
| None | 0 | Sem predição (bytes brutos) | Imagens com paleta (PNG-8), ruído aleatório |
| Sub | 1 | Pixel menos o vizinho à esquerda | Degradês horizontais, padrões horizontais |
| Up | 2 | Pixel menos o pixel acima | Degradês verticais, padrões verticais |
| Average | 3 | Pixel menos a média do pixel à esquerda + acima | Áreas suaves, conteúdo mesclado |
| Paeth | 4 | Pixel menos o preditor de Paeth (o mais próximo entre esquerda, acima e superior esquerdo) | Imagens naturais complexas |
| Adaptativo | 5 | Testa todos os filtros em cada linha e escolhe o melhor | Todas as imagens (melhor padrão) |
O filtro adaptativo (às vezes chamado de "misto" ou "todos") testa os cinco tipos de filtro em cada linha de pixels e escolhe o que gera a saída mais compressível. Essa abordagem de força bruta quase sempre produz o menor arquivo, mas demora mais para codificar. Para a entrega final na web, a filtragem adaptativa é sempre a escolha certa.
Quanto os filtros importam?
A escolha errada de filtro pode aumentar o tamanho do arquivo em 10 a 30%. Por exemplo, usar o filtro "None" em uma fotografia (em que pixels adjacentes são parecidos) desperdiça bastante potencial de compressão. Por outro lado, usar "Sub" ou "Paeth" em uma imagem com paleta e valores de índice aleatórios pode deixar o arquivo maior do que sem filtro algum.
É por isso que a filtragem adaptativa é o padrão seguro — ela sempre escolhe o filtro certo para cada linha, mesmo que a imagem tenha tipos de conteúdo mistos (como uma captura de tela com texto e fotografias).
Otimização da paleta de cores
A redução mais drástica no tamanho de um PNG vem da conversão de um PNG de 24 bits (16,7 milhões de cores) para uma paleta otimizada de 8 bits (256 cores). Ferramentas como o pngquant e o pngnq usam algoritmos sofisticados para selecionar as 256 melhores cores e aplicar pontilhamento (dithering) para simular as cores ausentes.
Como o pngquant funciona
O pngquant analisa a imagem para encontrar as 256 cores que melhor representam o original. Para pixels que ficam entre as cores da paleta, ele aplica o pontilhamento de Floyd-Steinberg — uma técnica que distribui o erro de cor para os pixels vizinhos, criando a ilusão de mais cores por meio da mistura espacial.
# Otimização básica de paleta (256 cores, qualidade 65-80)
pngquant 256 --quality=65-80 input.png -o output.png
# Otimização de paleta com qualidade máxima
pngquant 256 --quality=80-100 --speed 1 input.png -o output.png
# Converter para um número específico de cores
pngquant 64 input.png -o output.png # 64 cores
pngquant 16 input.png -o output.png # 16 cores (muito pequeno)
Resultados típicos da otimização de paleta
| Tipo de imagem | Tamanho em PNG-24 | PNG-8 (256 cores) | Economia | Impacto visual |
|---|---|---|---|---|
| Logotipo (12 cores) | 45 KB | 8 KB | 82% | Nenhum (sem perdas) |
| Captura de tela de interface | 380 KB | 95 KB | 75% | Pontilhamento mínimo |
| Ilustração (cores chapadas) | 210 KB | 52 KB | 75% | Nenhum a mínimo |
| Infográfico com degradês | 620 KB | 180 KB | 71% | Pontilhamento nos degradês |
| Fotografia | 8,5 MB | 2,1 MB | 75% | Pontilhamento intenso (use JPG) |
Importante: tecnicamente, a otimização de paleta é com perdas — ela reduz o número de cores disponíveis. No entanto, para imagens que já usam menos de 256 cores distintas, a conversão é perfeitamente sem perdas. Para imagens com um pouco mais de cores, o pontilhamento produz resultados visualmente indistinguíveis do original a distâncias normais de visualização.
Comparação de ferramentas de otimização de PNG
Várias ferramentas especializadas vão além do que o ImageMagick oferece para compressão de PNG. Cada uma usa uma abordagem diferente:
| Ferramenta | Tipo | Abordagem | Economia típica |
|---|---|---|---|
| optipng | Sem perdas | Testa várias combinações de filtro/compressão | 5–15% |
| pngcrush | Sem perdas | Teste de força bruta de todas as combinações de filtro/nível | 5–15% |
| zopflipng | Sem perdas | Codificador Zopfli do Google (saída DEFLATE mais lenta e menor) | 8–20% |
| pngquant | Com perdas (paleta) | Reduz para uma paleta de 256 cores com pontilhamento | 60–80% |
| oxipng | Sem perdas | Alternativa multithread ao optipng (Rust) | 5–15% |
Para os melhores resultados, combine uma ferramenta com perdas e uma sem perdas: primeiro rode o pngquant (se a redução de paleta for aceitável) e depois o zopflipng ou o optipng no resultado, para a máxima compressão sem perdas:
# Pipeline de compressão máxima
pngquant 256 --quality=80-100 input.png -o temp.png
zopflipng temp.png output.png
rm temp.png
Quando a compressão PNG chega ao limite
Nenhuma otimização de PNG supera a realidade fundamental: a compressão sem perdas não consegue competir com a compressão com perdas em fotografias. Isso não é uma falha do PNG — é uma certeza matemática. Algoritmos sem perdas precisam preservar cada pixel, enquanto o JPEG descarta informações que o olho não percebe.
| Tipo de imagem | PNG otimizado | JPEG Q85 | PNG é maior em |
|---|---|---|---|
| Foto de smartphone de 12 MP | 14,2 MB | 1,8 MB | 7,9x |
| Foto de DSLR de 24 MP | 28,5 MB | 4,7 MB | 6,1x |
| Captura de tela 1080p | 850 KB | 240 KB | 3,5x |
| Logotipo simples (12 cores) | 8 KB | 22 KB | JPEG é 2,8x maior |
| Ícone de interface (cores chapadas) | 3 KB | 9 KB | JPEG é 3x maior |
O padrão é claro:
- Fotografias e imagens naturais complexas — converta para JPEG. Você economiza de 3 a 8 vezes, sem perda de qualidade perceptível em Q85.
- Gráficos simples, logotipos, ícones, capturas de tela com muito texto — fique com o PNG. Ele será menor que o JPEG e preservará bordas nítidas com perfeição.
- Imagens com transparência — fique com o PNG (o JPEG não suporta transparência). Considere o WebP como alternativa, que suporta compressão com perdas e transparência.
A resposta honesta: se o seu PNG é uma fotografia e a preocupação é o tamanho do arquivo, a melhor estratégia de "compressão PNG" é converter para JPEG. Use o conversor acima para passar de PNG para JPG — normalmente você verá uma redução de 70 a 90% no tamanho, com perda de qualidade imperceptível.
Guia passo a passo de compressão PNG
Aqui está uma árvore de decisão prática para reduzir o tamanho de um PNG:
Passo 1: a sua imagem é uma fotografia?
Se sim, converta para JPEG. Envie o PNG para o conversor acima; ele gera um JPG com qualidade 92 e preenche qualquer transparência com branco. Essa é a ação mais eficaz para PNGs de fotos. Uma fotografia PNG de 15 MB vira um JPEG de 1 a 2 MB em Q85, sem diferença visível.
Se não (é um gráfico, logotipo, ícone ou captura de tela), siga para o Passo 2.
Passo 2: quantas cores a sua imagem usa?
Verifique com o ImageMagick:
magick identify -verbose input.png | grep "Colors:"
Se tiver 256 cores ou menos: converta para PNG-8 e economize 70 a 80% sem perda de qualidade:
magick input.png -strip -colors 256 -type Palette PNG8:output.png
Se tiver mais de 256 cores: decida se a redução de paleta com pontilhamento é aceitável ou mantenha o PNG-24.
Passo 3: remova os metadados e maximize a compressão
# Compressão máxima sem perdas com remoção de metadados
magick input.png -strip -quality 95 PNG:output.png
Passo 4: considere ferramentas especializadas para economizar mais
# Otimização sem perdas (garantidamente sem mudança de qualidade)
optipng -o7 -strip all input.png -out output.png
# OU redução de paleta com perdas (economia drástica)
pngquant 256 --quality=80-100 input.png -o output.png
Compressão de PNG em lote
Quando você precisa comprimir uma pasta inteira de arquivos PNG, as ferramentas de linha de comando são o caminho mais rápido.
Compressão em lote sem perdas
# Linux / macOS: compressão máxima + remoção de metadados
mkdir -p compressed
for f in *.png *.PNG; do
[ -f "$f" ] || continue
magick "$f" -strip -quality 95 "compressed/$f"
done
Otimização de paleta em lote (pngquant)
# Reduzir todos os PNGs para uma paleta de 256 cores
mkdir -p optimized
for f in *.png *.PNG; do
[ -f "$f" ] || continue
pngquant 256 --quality=80-100 "$f" -o "optimized/$f"
done
Windows PowerShell
New-Item -ItemType Directory -Force -Path ".\compressed"
Get-ChildItem *.png | ForEach-Object {
magick $_.FullName -strip -quality 95 (".\compressed\" + $_.Name)
}
Converter PNG para JPG em lote (economia máxima para fotos)
# Converter todas as fotos PNG para JPEG Q85
mkdir -p jpg_output
for f in *.png *.PNG; do
[ -f "$f" ] || continue
magick "$f" -quality 85 -interlace Plane -strip "jpg_output/${f%.*}.jpg"
done
Como deixar um PNG abaixo de um limite de tamanho (por exemplo, 5 MB)
O tamanho de um PNG depende principalmente da quantidade de pixels e do conteúdo da imagem. Como ponto de partida, uma imagem RGB de 8 bits sem compressão ocupa largura × altura × 3 bytes:
| Dimensões | Pixels | RGB sem compressão |
|---|---|---|
| 4000 × 3000 | 12 MP | 36 MB |
| 3000 × 2250 | 6,75 MP | 20,3 MB |
| 2000 × 1500 | 3 MP | 9 MB |
| 1600 × 1200 | 1,92 MP | 5,8 MB |
Depois, a compressão PNG reduz esse valor: um pouco em fotos, bastante em gráficos de cores chapadas. Se um PNG de foto ainda passar do limite em um tamanho aceitável para você, converta para JPG ou reduza para uma paleta de 256 cores.