Base64 é codificação, não compressão
Base64 padrão representa três bytes com quatro caracteres: comprimento exato 4 × ceil(n / 3) e aumento contínuo de cerca de 33,3%. A Data URL ainda inclui o prefixo MIME.
A ferramenta reduz primeiro os bytes da imagem: decodifica, altera dimensões, qualidade ou formato quando útil e gera Base64 padrão novamente.
Gzip cria outra saída
Aplicar Gzip ao Base64 gera dados binários que precisam ser descompactados antes da exibição. Codificá-los outra vez não cria uma Data URL de imagem comum.
JPEG, PNG e WebP já são formatos comprimidos. Menos pixels, qualidade com perda, remoção de metadados ou troca de formato podem ajudar, sem garantia de perda zero ou redução.
Tamanho-alvo sem aumentar
JPEG e WebP usam busca de qualidade com limite fixo. Se não bastar, as dimensões diminuem em rodadas limitadas, preservando a proporção.
Se o Base64 padrão não tiver menos caracteres, os bytes originais são mantidos. Um resultado menor que não atinge o alvo em KB é identificado com clareza.
Processamento local e limites
Tudo permanece na aba: sem upload, URL remota, telemetria ou biblioteca externa. Limites de 20 MiB e 16 megapixels protegem o navegador.
SVG, GIF, ICO e WebP animado são recusados para não executar conteúdo nem perder quadros. Auto preserva transparência; JPEG exige fundo confirmado. Canvas não é antivírus.
Quando evitar Base64
É útil para recursos pequenos e autocontidos. Imagens grandes funcionam melhor como Blob URL, arquivo separado ou upload binário, com cache e transferência próprios.
Bytes e caracteres Base64 são comparados separadamente. Remover o prefixo data: não conta como compressão.
Falhas comuns explicadas
- Caracteres, padding ou comprimento Base64 inválidos.
- O MIME declarado difere dos magic bytes.
- A imagem excede 20 MiB, 16 megapixels ou não pode ser decodificada.
- A entrada é animada, multiquadro, SVG ou já está muito otimizada.
Comandos equivalentes
Use o runtime ou shell já disponível. Valide entradas não confiáveis e não imprima binários diretamente no terminal.
Python
from PIL import Image
from io import BytesIO
import base64
image = Image.open(BytesIO(base64.b64decode(value)))
out = BytesIO(); image.save(out, 'WEBP', quality=82)
result = base64.b64encode(out.getvalue()).decode('ascii')
JavaScript
const blob = new Blob([bytes], { type: mime });
const bitmap = await createImageBitmap(blob);
ctx.drawImage(bitmap, 0, 0, width, height);
const output = await new Promise(r => canvas.toBlob(r, 'image/webp', 0.82));
bitmap.close();
Shell
printf '%s' "$VALUE" | base64 --decode > input.png
magick input.png -resize '1920x1920>' -quality 82 output.webp
base64 --wrap=0 output.webp
Padrões e referências oficiais
Perguntas sobre compressão de imagem Base64
Dá para comprimir o Base64?
Compressão genérica cria outro formato binário. Para manter Base64 de imagem padrão, otimize os bytes e recodifique.
Funciona direto em img src?
Sim. Raw é Base64 padrão e Data URL usa data:image/...;base64.
Como chegar a 100 KB?
Escolha Custom e 100 KB. A busca de qualidade e dimensões é limitada; nem toda imagem alcança o alvo.
A qualidade diminui?
Pode diminuir. Redimensionamento e qualidade JPEG/WebP são com perda; PNG pode não ficar menor.
Por que aumenta cerca de 33%?
Três bytes viram quatro caracteres. O total exato é 4 × ceil(n / 3).
A imagem é enviada?
Não. Análise, Canvas, preview, cópia e download são locais.
Gzip antes ou depois?
Para transporte, comprima a resposta HTTP externa quando fizer sentido. Gzip não funciona como Data URL sem descompactação.