Enviar um arquivo
  1. base64hub
  2. Ferramentas de imagem
  3. Base64 para imagem

Base64 para imagem

Cole o Base64 ou um URI data:image/... inteiro e veja a imagem na hora. A ferramenta lê a assinatura do arquivo, então o download recebe a extensão correta mesmo quando a string não tem prefixo.

Grátis sem cadastro, sem limites Local nada é enviado Automático formato pelos primeiros bytes Atualizado 27 de out. de 2026
Entrada –Saída –Tamanho –

Processado no seu navegador. Esta página não consegue enviar seus dados para lugar nenhum – como sabemos

Como converter Base64 em imagem

  1. Cole a string na caixa. Um valor longo salvo em arquivo pode ser aberto com Abrir arquivo .txt ou arrastado para a caixa.
  2. Com Ao vivo ligado, a imagem é decodificada assim que você cola. A linha de status mostra se o Base64 é válido, a variante (padrão ou Base64URL), a quantidade de bytes e o formato Detectado.
  3. Confira a prévia. Abaixo dela aparecem o tipo, o tipo MIME, a extensão, o tamanho em bytes, as dimensões em pixels e o hash SHA-256.
  4. Ajuste o Nome do arquivo se quiser e clique em Baixar arquivo. Copiar como data URI entrega um URI data: limpo para HTML ou CSS.

Exemplo carrega um PNG pequeno, para você ver como fica a saída antes de colar os seus dados.

O que você pode colar

O decodificador tolera o que vem em volta do Base64, porque strings de imagem raramente chegam limpas:

  • Base64 puro, como uma API devolve: iVBORw0KGgoAAAANSUhEUg...
  • Um data URI: data:image/png;base64,iVBORw0KGgo...
  • Código que contém um data URI: background-image: url("data:image/svg+xml;base64,..."), <img src="data:image/jpeg;base64,...">, uma imagem em Markdown ![](data:...) ou um campo JSON cujo valor é um data URI. O primeiro data URI é extraído automaticamente.
  • Base64 com quebra de linha vindo do código-fonte de e-mails ou de saídas no estilo PEM, com espaços ou quebras a cada 64 ou 76 caracteres.
  • Base64 URL-safe com - e _, strings sem o preenchimento = e valores entre aspas.

Se o Base64 estiver em um campo JSON sem prefixo data:, copie só o valor entre as aspas. Um documento JSON inteiro é rejeitado como Base64 inválido, já que { não faz parte do alfabeto.

Como o formato é detectado

Todo formato de imagem começa com uma assinatura fixa, os chamados magic bytes. A ferramenta decodifica a string e compara os primeiros bytes com essas assinaturas, então uma string marcada como image/png que na verdade contém um JPEG é reconhecida como JPEG. As mesmas assinaturas aparecem no próprio Base64, o que ajuda quando você lê logs ou dumps de banco de dados:

FormatoPrimeiros bytesO Base64 começa comTipo MIME
PNG89 50 4E 47 0D 0A 1A 0AiVBORw0KGgoimage/png
JPEGFF D8 FF/9j/image/jpeg
GIFGIF89a / GIF87aR0lGODlh / R0lGODdhimage/gif
WebPRIFF, tamanho, WEBPUklGR, com XRUJQ nos caracteres 12–16image/webp
SVG<svg / <?xmlPHN2Zy / PD94bWwgimage/svg+xml
ICO00 00 01 00AAABAAimage/x-icon
BMPBMQkimage/bmp
HEICtamanho, ftypheicAAAA, depois eXBoZWlj no caractere 9image/heic
TIFFII* / MM*SUkqAA / TU0AKgimage/tiff

Arquivos AVIF, JPEG XL e de cursor (.cur) também são detectados. Quando um data URI declara um tipo e o conteúdo diz outro, um aviso mostra os dois. Se os dados não forem imagem, por exemplo um PDF, a página avisa e oferece um botão Baixar como .pdf. A página de prefixos comuns de Base64 lista assinaturas de muitos outros tipos de arquivo.

Por que a imagem não aparece

A string foi cortada. Valores Base64 são truncados por limites de linha de log, tamanho de colunas de banco de dados, células de planilha (32.767 caracteres) e copiar e colar do terminal. Um JPEG ou PNG então é renderizado só em parte, ou a prévia falha. Se um caractere a mais ou a menos deixar o comprimento impossível, aparece o erro “Comprimento incorreto”. Uma string válida, mas curta, decodifica sem erro, então compare o Tamanho com o que você esperava.

O tipo MIME no data URI está errado. data:image/png na frente de bytes JPEG em geral ainda aparece nos navegadores, que identificam imagens raster pelo conteúdo, mas outros programas confiam no rótulo. Com SVG, o navegador nunca faz isso: com qualquer tipo diferente de image/svg+xml, ele não é renderizado em um <img>. A ferramenta usa o formato real para a prévia e para o download.

Caracteres foram alterados no caminho. Um + que passou por codificação de formulário muitas vezes volta como espaço. Quando uma string de uma linha tem espaços e nenhum +, o decodificador transforma os espaços de volta em +; quando os dois aparecem, não há como distingui-los e a imagem pode decodificar com os bytes errados. O JSON gerado por algumas bibliotecas escapa as barras como \/; o decodificador remove esses escapes e as sequências \n literais por você. Para casos mais bagunçados, Reparar Base64 lista cada correção que faz.

Foi codificado duas vezes. Se os bytes decodificados forem, eles mesmos, texto Base64, um aviso indica isso e Decodificar de novo desembrulha a próxima camada. Voltar retorna ao passo anterior. O mesmo vale para data URIs dentro de Base64 e para dados compactados com gzip ou zlib.

O navegador não exibe o formato. Fotos HEIC de iPhone só aparecem no Safari 17 ou mais recente, TIFF só no Safari, e JPEG XL exige Safari 17, Chrome 155 ou Firefox 158 ou mais recentes. A prévia então avisa que o navegador não consegue exibir a imagem, mas os bytes estão intactos: Baixar arquivo salva um arquivo que funciona e que um app de fotos consegue abrir.

Não é uma imagem. Uma string Base64 que começa com JVBER é um PDF, e UEsDB é um arquivo ZIP. Use Base64 para arquivo, que mostra a prévia de documentos, arquivos compactados, áudio e mais.

Salvando com a extensão certa

Os campos Extensão e Tipo MIME são preenchidos a partir do formato detectado até você editá-los, então um PNG é salvo como .png mesmo que nada na entrada dissesse “PNG”. O Windows e os formulários de upload julgam o arquivo pela extensão. Se você renomear um WebP para .jpg, por dentro ele continua sendo WebP, e programas mais rígidos vão rejeitá-lo.

Você pode sobrescrever os dois campos, por exemplo para salvar um ícone como .cur ou digitar um tipo MIME próprio. Um tipo MIME alterado também renderiza a prévia de novo com esse tipo.

SHA-256 e dump hex

O hash SHA-256 abaixo da prévia é calculado sobre os bytes decodificados. Compare com o hash do remetente, de um registro no banco de dados ou de sha256sum image.png para provar que a imagem salva é exatamente o arquivo que foi codificado, byte a byte. Para calcular o hash de outros dados, veja a ferramenta de SHA-256.

Mostrar dump hex exibe os primeiros 512 bytes. É o jeito mais rápido de inspecionar um cabeçalho: a largura e a altura do PNG no offset 0x10, o marcador Exif em um JPEG de câmera ou o diretório de imagens de um arquivo ICO.

Privacidade: as imagens ficam no seu dispositivo

Imagens em Base64 muitas vezes são coisas que você não enviaria para um site qualquer: prints de um relatório de bug, digitalizações de RG ou passaporte, imagens médicas exportadas de um portal de paciente, assinaturas capturadas em um tablet. Esta página as decodifica inteiramente no seu navegador. A Content Security Policy da página bloqueia requisições de rede dos scripts dela, exceto as do contador de visitas da Cloudflare, e Baixar arquivo salva a partir de uma URL blob: local. Nada do que você cola é armazenado pelo site.

Decodificar uma imagem Base64 no código

Em Python, remova o prefixo, restaure o preenchimento e escolha a extensão pela assinatura:

import base64, re

def save_image(b64: str, stem: str = "image") -> str:
    b64 = re.sub(r"^data:[^,]*;base64,", "", b64.strip(), flags=re.I)
    b64 = re.sub(r"\s+", "", b64).replace("-", "+").replace("_", "/")
    data = base64.b64decode(b64 + "=" * (-len(b64) % 4))
    if data.startswith(b"\x89PNG"):
        ext = "png"
    elif data.startswith(b"\xff\xd8\xff"):
        ext = "jpg"
    elif data.startswith(b"GIF8"):
        ext = "gif"
    elif data[:4] == b"RIFF" and data[8:12] == b"WEBP":
        ext = "webp"
    else:
        ext = "bin"
    with open(f"{stem}.{ext}", "wb") as f:
        f.write(data)
    return f"{stem}.{ext}"

No navegador, transforme a string em um Blob e mostre por meio de uma object URL:

function base64ToBlob(b64, type = "image/png") {
  const bin = atob(b64.replace(/^data:[^,]*;base64,/, "").replace(/\s+/g, ""));
  const bytes = Uint8Array.from(bin, c => c.charCodeAt(0));
  return new Blob([bytes], { type });
}

img.src = URL.createObjectURL(base64ToBlob(str));

Há mais sobre leitura e escrita de dados binários em Base64 em Python e Base64 em JavaScript. Para o caminho inverso, Imagem para Base64 codifica uma imagem, com redimensionamento e conversão de formato.

Perguntas frequentes

Preciso do prefixo data:image/png;base64,?

Não. Base64 puro funciona, e o tipo é lido dos bytes decodificados. Se você colar um data URI completo, o prefixo é removido automaticamente e o tipo declarado é comparado com o conteúdo.

Como saber qual é o formato de imagem de uma string Base64?

Olhe os primeiros caracteres: iVBORw0KGgo é PNG, /9j/ é JPEG, R0lGOD é GIF, UklGR é um arquivo RIFF, como o WebP. Cole a string acima e o campo Detectado informa o formato.

Por que a imagem decodificada aparece cortada embaixo?

A string Base64 foi truncada ao ser copiada, registrada em log ou armazenada. Os navegadores desenham o que conseguem de um PNG ou JPEG incompleto. Copie o valor de novo da origem; nenhuma ferramenta recupera bytes que não estão na string.

É seguro decodificar prints ou fotos de documentos aqui?

A decodificação acontece no JavaScript desta página, e a Content Security Policy dela bloqueia todas as requisições de rede da página, exceto as do contador de visitas da Cloudflare, então a imagem não é enviada a lugar nenhum. Para confirmar, acompanhe a aba de rede das ferramentas de desenvolvedor do navegador enquanto decodifica.

Dá para converter a imagem decodificada para outro formato?

Não, a ferramenta salva exatamente os bytes que foram codificados. Para ter uma versão PNG, JPEG ou WebP, baixe o arquivo, passe por Imagem para Base64 com Converter para e depois decodifique o resultado.