🖼️ Conversor de Imagem para Base64
Arraste uma imagem e converta instantaneamente para uma URI de dados Base64 para CSS, HTML ou JSON. 100% local no seu navegador.
Arraste e solte uma imagem aqui
ou clique para procurar um arquivo (PNG, JPG, SVG, WebP, GIF)
Resultado em Base64
Como Converter uma Imagem para Base64 Online
Uma URI de dados em Base64 pega uma imagem que normalmente viveria no próprio arquivo e a dobra dentro de uma string de texto, pequena o suficiente para caber em um atributo HTML, uma declaração CSS ou um campo JSON. Em vez de o seu navegador fazer uma viagem separada até o servidor para buscar logo.png, a imagem viaja embutida dentro do próprio documento que precisa dela. Esse conversor monta essa string inteiramente no seu próprio dispositivo, então você sai de um arquivo de imagem para um código pronto para colar no tempo de um arrastar e soltar.
O fluxo é propositalmente curto. Solte um arquivo PNG, JPG, SVG, WebP ou GIF na área de soltar acima, ou clique nela para abrir o seletor de arquivos comum. Assim que o navegador termina de ler o arquivo, uma prévia aparece e o campo de resultado Base64 se preenche automaticamente, sem nenhum botão de "converter" para clicar e sem recarregar a página.
- Escolha sua imagem. Arraste um arquivo do seu desktop ou gerenciador de arquivos até a área de soltar, ou clique nela para procurar um. Qualquer coisa que seu navegador consiga exibir como imagem, ele consegue codificar.
- Deixe a decodificação automática rolar. A ferramenta lê os bytes puros do seu arquivo usando a API FileReader nativa do navegador e os codifica em uma string Base64 no instante em que o arquivo carrega.
- Escolha um formato de saída. Use o menu suspenso Formato de Saída para alternar entre uma string de URI de dados pura, uma declaração CSS background-image já pronta, ou uma tag HTML img completa.
- Copie ou baixe o resultado. Clique em Copiar Código para levar o texto exato para a área de transferência, ou em Baixar Texto se a string for longa e você preferir salvá-la como arquivo para usar depois.
Como todo o processo roda como JavaScript dentro da sua própria aba do navegador, não existe etapa de envio, não existe fila de espera em servidor, e o único limite é a memória do seu próprio computador.
Entendendo a Sintaxe da URI de Dados
Toda string Base64 gerada por essa ferramenta segue o mesmo padrão definido pelo esquema de URI de dados: data:[tipo-mime];base64,[dados-codificados]. O prefixo data: avisa o navegador que isso não é uma URL comum apontando para outro lugar, é o próprio conteúdo, chegando embutido. O tipo MIME logo depois, algo como image/png, image/jpeg, image/svg+xml ou image/webp, diz exatamente ao navegador como interpretar os bytes que vêm a seguir, para que ele renderize um PNG como PNG e um SVG como SVG em vez de tentar adivinhar por uma extensão de arquivo que nem existe mais.
A marca ;base64 indica a codificação usada no conteúdo, e tudo depois da vírgula é a imagem em si, traduzida do binário puro para o alfabeto de 64 caracteres formado por letras maiúsculas, minúsculas, números, mais e barra. Um favicon minúsculo de 16 por 16 pode gerar uma string de apenas algumas centenas de caracteres, enquanto uma fotografia detalhada pode se estender por centenas de milhares de caracteres, tudo em uma única linha ininterrupta.
| Contexto | Sintaxe de Exemplo |
|---|---|
| Fundo CSS | background-image: url(data:image/png;base64,iVBOR...); |
| Tag HTML img | <img src="data:image/jpeg;base64,/9j/4AA..."> |
| URI de dados SVG inline | data:image/svg+xml;base64,PHN2ZyB4b... |
| Propriedade customizada CSS | --icone-fechar: url(data:image/svg+xml;base64,...); |
Essa ferramenta detecta o tipo MIME e faz a codificação automaticamente com base no arquivo que você solta, então você nunca precisa escrever esse prefixo à mão, mas reconhecer o padrão ajuda na hora de descobrir por que uma string colada no contexto errado se recusa a renderizar.
Os 33% de Sobrepeso: Por Que o Base64 Pesa Mais que o Arquivo Original
A codificação Base64 agrupa os dados binários originais em blocos de 3 bytes e mapeia cada bloco para 4 caracteres de texto imprimíveis. Essa proporção de 3 para 4 é fixada pela matemática da própria codificação, não pelo formato da imagem nem pelas configurações de compressão, e significa que toda string Base64 pesa aproximadamente 33% a mais do que o arquivo de onde ela veio, antes de qualquer compressão adicional como gzip ou Brotli que o servidor possa aplicar em cima.
Na prática, isso significa que um ícone de 60 KB chega perto de 80 KB depois de codificado, e uma foto de 300 KB passa dos 400 KB. Para um único ícone pequeno, essa diferença é invisível para o usuário. Repetido em uma página cheia de miniaturas embutidas, ou incluído em um arquivo CSS enviado a cada visitante em cada carregamento de página, esse sobrepeso se acumula até virar um documento genuinamente mais pesado do que servir essas mesmas imagens como arquivos separados.
Vale lembrar que essa expansão acontece em cima do arquivo, não no lugar dele. Converter um JPEG para Base64 não comprime ele mais, só muda como esses mesmos bytes já comprimidos são representados como texto, então qualquer otimização de imagem, como redimensionar uma foto ou passá-la para um formato como WebP, deve acontecer antes de codificar, nunca depois.
Quando Embutir uma Imagem Ajuda (e Quando Prejudica) a Performance
Toda imagem referenciada por <img src="..."> ou um url(...) de CSS normalmente dispara sua própria requisição HTTP. Em conexões HTTP/1.1 mais antigas, os navegadores só conseguiam abrir um punhado de conexões simultâneas por domínio, então uma página com dezenas de ícones pequenos sofria de verdade com esse peso extra de requisições, e embutir esses ícones como strings Base64 eliminava completamente essas viagens extras. Esse é o argumento original a favor de embutir imagens, e ele continua válido para gráficos pequenos e decorativos que aparecem uma vez só e raramente mudam.
Conexões modernas HTTP/2 e HTTP/3 multiplexam várias requisições em uma única conexão, o que enfraquece bastante o argumento original. Buscar dez arquivos externos pequenos por HTTP/2 já não é nem de longe tão caro quanto era há uma década, enquanto a penalidade de 33% do Base64 continua exatamente igual. Isso volta a inclinar a balança para arquivos linkados na maioria das imagens do dia a dia, reservando o embutimento para casos em que evitar até uma única requisição extra ainda importa, como gráficos principais acima da dobra que precisam aparecer no instante em que o HTML é processado, ou ferramentas de arquivo único que não podem depender de uma segunda requisição de rede.
Uma regra prática útil: embuta o que é realmente pequeno, ícones, indicadores de carregamento, logotipos minúsculos, geralmente abaixo de 5 a 10 KB, e linke o resto. Uma imagem grande embutida também atrasa o momento em que o navegador termina de processar o documento HTML ou CSS ao redor dela, já que ele precisa ler a string codificada inteira antes de seguir em frente, o que pode adiar o momento em que o resto da página se torna visível.
Usando Imagens Base64 em CSS
O destino mais comum de uma imagem Base64 é uma declaração background-image em CSS, que é exatamente o que o formato de saída CSS dessa ferramenta produz. Ao escolher esse formato, sua string codificada fica envolvida em background-image: url('data:image/png;base64,...');, pronta para colar direto em uma folha de estilos, um bloco <style> ou um atributo style inline.
Esse padrão aparece o tempo todo para pequenos detalhes visuais repetidos: uma textura de ruído sutil atrás de um cartão, um ícone personalizado substituindo o marcador padrão de uma lista, o estado marcado de um checkbox ou botão de rádio, ou um divisor decorativo em SVG entre seções. Como a imagem viaja junto com o próprio CSS, não sobra nada extra para o navegador buscar depois que a folha de estilos já carregou, o que importa para elementos que aparecem no instante em que a página renderiza, antes mesmo de qualquer recurso com carregamento adiado ter tido tempo de chegar.
O lado ruim é que um CSS cheio de strings Base64 longas fica bem mais difícil de ler e manter, e essa folha de estilos inflada precisa ser baixada e processada por completo antes de o navegador conseguir aplicar qualquer um dos estilos que vêm depois dela. Limitar as imagens Base64 no CSS a recursos realmente pequenos, e usar uma referência normal url('/imagens/foto.jpg') para qualquer coisa maior, mantém tanto a folha de estilos quanto a própria página rápidas.
Imagens Base64 em HTML e a Realidade dos Templates de E-mail
Escolher o formato de saída HTML envolve sua string codificada em uma tag pronta para usar, <img src="data:image/png;base64,..." />, que funciona exatamente como uma tag de imagem normal em qualquer lugar onde um navegador renderiza HTML, incluindo relatórios de página única, documentos exportados e ferramentas offline que precisam funcionar como um único arquivo autocontido, sem nenhum recurso externo.
E-mail é o único lugar onde esse padrão merece cautela de verdade. Gmail e Apple Mail geralmente renderizam sem problema imagens Base64 embutidas, mas as versões desktop do Outlook usam o motor de renderização do Word em vez de um motor de navegador moderno, e esse motor costuma remover ou simplesmente se recusar a exibir imagens com URI de dados. Um e-mail de marketing construído em cima de logotipos embutidos pode parecer perfeito em uma caixa pessoal do Gmail e mostrar um ícone de imagem quebrada para boa parte dos usuários corporativos do Outlook. Para qualquer coisa enviada como e-mail em massa, uma imagem hospedada normalmente com um atributo alt bem escrito continua sendo a opção segura por padrão, e Base64 fica melhor reservado para HTML cuja renderização você controla por completo, como uma notificação dentro do seu próprio app, um PDF exportado ou um recibo imprimível.
Fora do e-mail, essa mesma qualidade autocontida é genuinamente útil: um único arquivo HTML que inclui seu próprio logotipo e ícones como strings Base64 pode ser enviado como anexo, aberto direto de um disco local ou arquivado indefinidamente, tudo sem um único link de imagem quebrado, porque não existe arquivo externo algum que uma futura mudança de nome ou de lugar possa quebrar.
SVG e Base64: Quando a Codificação Realmente Ajuda
O SVG ocupa um lugar meio fora do padrão nessa conversa toda porque um arquivo SVG já é texto puro, não dados binários. Isso significa que dá para embuti-lo em um url() de CSS usando codificação de URL normal em vez de Base64, e um SVG codificado como URL costuma pesar menos do que o mesmo arquivo passado por Base64, porque a codificação de URL só escapa um punhado de caracteres especiais em vez de reescrever cada byte em um alfabeto de 4 caracteres.
Mesmo assim, o Base64 ganha seu espaço com SVG em algumas situações específicas. É a opção mais simples sempre que o contexto ao redor não tolera as aspas, cerquilhas e colchetes angulares que o marcador SVG cru ou codificado como URL carrega, como dentro de uma única string JSON, uma coluna de banco de dados ou o valor de uma propriedade customizada de CSS onde escapar caracteres fica complicado. Também funciona bem como atributo <img src="data:image/svg+xml;base64,...">', e essa ferramenta gera exatamente esse formato automaticamente quando você solta um arquivo SVG e escolhe a saída HTML.
O que o Base64 não consegue fazer pelo SVG é preservar sua maior vantagem: a estilização ao vivo. Um SVG colado direto no seu HTML como marcador <svg> inline pode ter a cor de preenchimento trocada com currentColor e CSS, reagir a :hover, e ser manipulado com JavaScript, nada disso é mais possível depois que ele é achatado em uma string Base64 opaca. Se você precisa de um ícone com tema personalizável, mantenha o marcador SVG inline. Se você precisa de uma referência de imagem portátil e opaca, codificá-lo em Base64 é a escolha certa, e essa ferramenta faz essa conversão em um único arrastar e soltar.
Trocas Envolvidas no Cache do Navegador
Um arquivo de imagem normal referenciado por URL ganha sua própria entrada no cache HTTP do navegador, regida pelos cabeçalhos Cache-Control que o servidor envia. Visite dez páginas que referenciam o mesmo /logo.png, e o navegador baixa esse arquivo exatamente uma vez, e reutiliza a cópia em cache em cada página seguinte pelo tempo que o cabeçalho de cache permitir, às vezes por meses.
Uma imagem em Base64 não tem esse privilégio. Como ela vive dentro do próprio documento HTML ou CSS em vez de existir como um recurso próprio, ela é baixada, processada e decodificada de novo toda vez que esse documento pai carrega, mesmo entre páginas que reutilizam exatamente a mesma imagem. Não existe uma entrada de cache separada que o navegador possa reutilizar, porque, do ponto de vista da camada de cache, não existe recurso independente nenhum, só mais bytes dentro de um documento que ele já ia buscar de qualquer jeito.
Esse é o maior argumento contra embutir qualquer coisa que apareça mais de uma vez em um site. Um logotipo compartilhado, um conjunto de ícones repetido ou um padrão de fundo usado no site inteiro é muito melhor servido como arquivo linkado com vida longa de cache, baixado uma vez e reutilizado em todo lugar, do que como uma string Base64 duplicada em cada página e folha de estilos que precisa dele. Reserve o embutimento para imagens realmente únicas de um único documento, onde não existe com quem dividir uma entrada de cache, para começar.
Usos Comuns Deste Conversor de Imagem para Base64
Desenvolvedores que constroem aplicações de página única ou dashboards internos usam Base64 para pequenos gráficos de espaço reservado e ícones de estado de carregamento que precisam renderizar antes mesmo de o pacote principal de JavaScript terminar de baixar, já que uma URI de dados inline aparece na tela instantaneamente com o primeiríssimo byte de HTML, sem esperar por uma segunda requisição.
Qualquer pessoa que gere relatórios offline, PDFs exportados ou entregas em HTML de arquivo único recorre ao Base64 para manter um documento realmente autocontido, com seu logotipo, gráficos ou diagramas embutidos direto no arquivo, para que nada quebre quando esse arquivo for enviado por e-mail, arquivado ou aberto anos depois em uma máquina sem acesso à hospedagem original das imagens.
Designers e desenvolvedores front-end usam o formato de saída CSS o tempo todo para pequenas decorações de interface, estados personalizados de checkbox e botão de rádio, texturas de fundo sutis e substitutos para fontes de ícones, em casos onde o recurso é pequeno o bastante para o sobrepeso de 33% quase não ser percebido, mas a requisição economizada acelera de verdade a primeira renderização da página.
E como toda a conversão acontece localmente, quem precisa converter algo sensível, um contrato assinado e escaneado, uma foto de identificação privada, uma captura de tela de um produto ainda não lançado, usa essa ferramenta justamente porque ela nunca pede para nada sair do próprio dispositivo.
Por Que Esse Conversor Funciona Totalmente no Seu Navegador
Muita ferramenta de "converter imagem para Base64" por aí sobe em silêncio tudo o que você solta nela para um servidor, codifica lá e devolve a string. Essa ida e volta é invisível se você está convertendo um logotipo público, mas vira uma preocupação real no momento em que a imagem é um documento assinado, uma foto privada, uma captura de tela com dados confidenciais, ou qualquer material de design ainda não lançado que você não gostaria de ver, nem que fosse por pouco tempo, no servidor de outra pessoa.
Esse conversor nunca faz essa viagem. Ele lê seu arquivo usando a API FileReader nativa do navegador, codifica os bytes com JavaScript rodando no seu próprio dispositivo, e mostra o resultado, tudo sem que uma única requisição de rede leve sua imagem para lugar nenhum. Abra a aba de rede do seu navegador enquanto usa a ferramenta e você não vai encontrar seu arquivo saindo da página. Isso também significa que não existe limite de tamanho imposto por servidor, não existe fila de processamento para esperar, e não existe dependência de uma API de terceiros continuar no ar; a conversão é exatamente tão rápida e tão disponível quanto o seu próprio computador.
Para times que lidam com material de clientes, uma identidade de marca ainda em desenvolvimento, ou qualquer coisa coberta por um acordo de confidencialidade, uma ferramenta puramente local tira a questão da confiança completamente da equação, em vez de pedir para você ler uma política de privacidade e torcer para que ela se sustente. É o mesmo raciocínio que leva desenvolvedores a rodar um formatador ou um linter localmente em vez de colar código-fonte proprietário em um formulário web qualquer.
Perguntas Frequentes
Ferramentas de Desenvolvimento Relacionadas
🔒 100% Privado e Local
Cada imagem é decodificada e codificada <strong>totalmente no seu navegador</strong>. Nada é enviado a nenhum servidor. Sua imagem fica no seu dispositivo.