Sobre esta ferramenta
O que é um data URI
Um data URI leva um ficheiro dentro do próprio endereço: data:image/png;base64,iVBORw0KGgo…. A seguir a data: vem o tipo de media, depois um marcador ;base64 opcional que indica como o conteúdo está codificado e, por fim, o conteúdo depois de uma vírgula. Em qualquer sítio onde um navegador aceite o URL de uma imagem, como src em HTML ou url() em CSS, aceita também um data URI e mostra a imagem sem mais nenhum pedido. O formato está definido no RFC 2397.
Quanto custa incorporar
O Base64 escreve cada 3 bytes como 4 caracteres, por isso a imagem codificada fica cerca de 33% maior do que o ficheiro. Uma imagem incorporada fica também presa ao documento que a contém: o navegador não a consegue guardar em cache à parte, e ela é transferida de novo com cada página ou folha de estilos que a repete.
Isto faz dos data URIs uma boa escolha para algumas imagens pequenas, como um ícone de um ou dois kilobytes ou um placeholder, e uma má escolha para fotografias. A ferramenta avisa-o quando o resultado ultrapassa cerca de 10 KB.
O SVG não precisa de Base64
Um ficheiro SVG é texto, por isso pode entrar num data URI como texto: data:image/svg+xml;charset=utf-8,…. Só alguns caracteres têm de ser codificados com percent-encoding: os que terminariam o URL ou as aspas à volta dele, e os que um URL não consegue levar tal como estão. Um # sem escape, frequente em valores de cor, inicia o fragmento do URL e deixa a imagem incompleta. Esta ferramenta faz o escape de %, #, <, >, ", &, da barra invertida, dos espaços em branco e dos caracteres de controlo, e escreve os caracteres fora do ASCII como escapes UTF-8. Descodificar o resultado devolve o mesmo texto SVG. A forma em texto é oferecida quando o ficheiro é UTF-8 válido.
A forma codificada para URL continua legível e, como continua a ser texto simples, o gzip e o Brotli costumam comprimi-la melhor do que o Base64. Qual das formas é mais curta antes da compressão depende do ficheiro, por isso a ferramenta mostra os dois tamanhos.
Como funciona
A imagem é lida pelo seu navegador e codificada por JavaScript no seu dispositivo. A direção inversa funciona da mesma forma: o data URI colado é descodificado na página e oferecido como ficheiro. Nem a imagem nem o data URI são enviados.