El código de esta página no ha arrancado.

Abrir index.html directamente desde una carpeta bloquea los módulos de JavaScript, así que no pasará nada al elegir una imagen. En vez de eso, sirve la carpeta por http:

powershell -ExecutionPolicy Bypass -File serve.ps1

Abre después http://localhost:8080/.

Imagen a data URI — codificar una imagen en base64 para CSS o HTML

La imagen entera en una línea de texto, lista para pegarla en tu CSS o tu HTML.

Idioma: Español
Ver el código
Tus imágenes se procesan en tu navegador. No se suben para procesarlos.

La codificación ocurre dentro de tu navegador, en tu propio hardware. Es aritmética sobre unos bytes que la página ya tiene: sin codificador, sin servidor y sin ningún paso de red que quitar. Esta herramienta no tiene ninguna función de red, no descarga nada y no envía nada. Y aunque la tuviera, al otro lado de esta página no hay ningún servidor al que mandar una imagen.

Comprobación en directo: comprobando…

Sin conexión: comprobando…

No hace falta que nos creas. Abre las herramientas de desarrollo, ponte en la pestaña «Red» y suelta una imagen. No verás ni una petición que lleve una imagen, una miniatura, un nombre de archivo o un byte de lo que has elegido. O desconéctate de internet y codifica una igualmente.

1 Elige las imágenes

2 Di adónde va

Un data URI a secas casi nunca es lo que busca nadie. Lo que se busca es la línea que va en la hoja de estilos, así que elige la línea y la imagen te llega dentro de ella ya entrecomillada. Esa es justo la parte fácil de equivocar, y la que solo falla con los SVG.

El texto alt se deja vacío a propósito. Solo tú sabes si la imagen significa algo o es pura decoración, y para quien usa un lector de pantalla, una descripción adivinada a partir del nombre del archivo es peor que no tener ninguna.

Los SVG con otra codificación XML o con bytes que no son UTF-8 válido usan base64 automáticamente. Se conservan los bytes originales y la declaración de codificación.

Pasar también los SVG a base64 Desactivado por defecto, porque un SVG es texto y base64 es para bytes. La codificación por porcentajes deja el marcado legible en la hoja de estilos y suele ser una quinta parte más corta. Actívalo para esa rara cadena de herramientas que insiste en ;base64.

SVG

3 Cópialo

Todavía no has elegido nada. Suelta una imagen arriba y aquí aparece la línea para pegar.

Ver como Markdown

Cómo convertir una imagen en un data URI

  1. Elige tus imágenes. Arrástralas hasta el selector o búscalas a mano. El navegador las lee directamente del disco, y mientras lo haces no sale nada hacia ninguna parte.
  2. Di adónde va el resultado. El URI a secas, una regla CSS, una propiedad personalizada, una etiqueta <img> o Markdown. Todas entrecomillan el URI, que es el detalle del que depende que un SVG incrustado funcione o falle en silencio.
  3. Lee lo que ha costado. Cada resultado te dice en cuántos caracteres se ha convertido, cuánto más grande es eso que el archivo, y si incrustar algo de ese tamaño es buena idea. Base64 añade un tercio, y si ese tercio compensa una petición ahorrada depende por completo del tamaño, así que la página te dice de qué lado de la raya caes.
  4. Mira los avisos. Si la imagen lleva EXIF, un perfil de color o XMP, se te dice cuál es y cuántos bytes de tu resultado son eso. Si la extensión no coincide con el formato real, la página usa el formato y te avisa. Y si tu navegador no sabe dibujar el resultado, también te lo dice.
  5. Copia o descarga. Un botón por resultado, y uno para todos a la vez. Las propiedades personalizadas salen envueltas en un bloque :root, listas para pegarlas al principio de una hoja de estilos.

La versión larga

Cuándo meter una imagen dentro de tu CSS y cuándo no Lo que cuesta un data URI, por qué base64 añade un tercio y gzip no te lo devuelve, por qué un SVG no debería ir nunca en base64, y el error de comillas que rompe los SVG incrustados sin decir nada.

Preguntas

¿Se sube mi imagen a alguna parte?

No. El archivo lo lee y lo codifica tu propio navegador, en tu propio hardware, con dos funciones que ya trae. Esta herramienta no tiene ninguna función de red: nunca descarga nada y nunca envía nada. Además, la Content-Security-Policy de la página enumera todas las direcciones a las que puede conectarse, y ninguna de ellas es de este sitio.

¿Qué es un data URI?

Una forma de escribir un archivo entero donde normalmente iría una dirección web. En vez de url("logo.png"), que le manda al navegador ir a buscar algo, escribes url("data:image/png;base64,iVBORw0..."), que ya contiene la propia imagen. El navegador la descodifica ahí mismo. El efecto práctico es una petición menos: la imagen llega con la hoja de estilos o con la página, y no después de ellas.

¿Por qué mi SVG no sale en base64?

Los SVG en UTF-8 válido usan codificación por porcentajes, que sigue siendo legible y suele ser más corta que base64. Los SVG con otra codificación XML o UTF-8 inválido usan base64 automáticamente para conservar los bytes originales y la declaración de codificación. La casilla fuerza base64 también para los SVG en UTF-8. La vista previa sigue dependiendo de que el navegador pueda dibujar el archivo original.

¿Cuánto agranda base64 mi imagen?

Alrededor de un tercio. Tres bytes de archivo se convierten en cuatro caracteres de base64, o sea un 33 % antes de sumarle el data:image/png;base64, de delante. Ese es el suelo, y es inevitable: es lo que cuesta escribir bytes cualesquiera usando solo los caracteres que admite una URL. También es la razón de que la página te enseñe el número de caracteres junto al tamaño del archivo, en lugar de dejar que lo descubras con la hoja de estilos ya desplegada.

¿Cuándo compensa de verdad incrustar una imagen?

Cuando es pequeña y hace falta ya. Un icono de 2 KB dentro de una hoja de estilos que cargan todas las páginas es una victoria clara: un viaje de ida y vuelta menos, y la imagen está ahí en el mismo momento que el CSS. Pasados unos 10 KB el trato se da la vuelta. Una imagen incrustada deja de ser un archivo aparte, así que no se puede cachear por su cuenta, no se puede descargar en paralelo con nada y se vuelve a bajar entera cada vez que cambia el archivo que la rodea. Una fotografía de 200 KB en una hoja de estilos son 200 KB añadidos al camino crítico de todas las páginas del sitio. La página te dice de qué lado de esa raya cae cada resultado.

¿Gzip deshace el coste añadido de base64?

Menos de lo que la gente espera. El base64 de un archivo que ya venía comprimido, y eso es lo que son un PNG, un JPEG y un WebP, se comprime mal, porque apenas queda redundancia que el compresor pueda encontrar. Lo normal es recuperar más o menos una décima parte del tercio que añadió base64, no el tercio entero. Un SVG codificado con porcentajes es el caso contrario: sigue siendo texto, así que se comprime casi igual de bien que antes, y esa es otra razón para no pasarlo a base64.

¿Esto le cambia algo a mi imagen?

No, y es una diferencia deliberada respecto a casi todas las herramientas de aquí. No se descodifica nada a píxeles ni se vuelve a codificar: los bytes que salieron de tu disco son los mismos que entran en el URI. Un JPEG sigue siendo exactamente el JPEG que era, con la misma calidad y las mismas dimensiones. Por eso el resultado se puede describir como el mismo archivo y no como una copia.

Entonces, ¿mis datos EXIF y GPS también entran en la hoja de estilos?

Sí, y esta es la parte que conviene pensar antes de pegar nada. Como no se recodifica nada, todo lo que escribió la cámara viaja con la imagen: la ubicación, la marca de tiempo, el número de serie de la cámara. En una foto de móvil eso pueden ser 30 KB del archivo, que se convierten en 40 KB de base64 en el camino crítico de tu página, y en una dirección de casa metida en algo que va a acabar en un repositorio. La página lee cuántos metadatos hay en un JPEG, un PNG o un WebP y te lo dice. Para quitarlos antes, tienes el visor y eliminador de EXIF.

¿Por qué ha usado un tipo distinto del de la extensión de mi archivo?

Porque la extensión puede estar equivocada y los bytes no. Un archivo llamado logo.png que en realidad se exportó como JPEG es lo bastante habitual como para que cualquier herramienta de imagen tenga que apañárselas con ello, y un data URI que declara el tipo equivocado sencillamente no se ve, sin alternativa ni mensaje de error que merezca la pena leer. Así que el tipo se lee de los primeros bytes del archivo, que en todos los formatos de aquí dicen sin ninguna duda qué es, y la página te avisa cuando los dos no coinciden.

La vista previa sale en blanco. ¿Qué ha fallado?

Seguramente nada del URI. Tanto el HEIC como el TIFF dan data URI perfectamente válidos que ningún navegador salvo Safari va a dibujar, así que la imagen faltará también allá donde lo pegues. Conviértela antes a PNG, JPEG o WebP con el compresor de imágenes o el redimensionador de imágenes. Si el formato es de los corrientes, lo más probable es que el archivo esté dañado: la vista previa se dibuja a partir del URI que ha construido esta página, así que una vista en blanco significa que la imagen no ha descodificado.

¿Hay algún límite de tamaño en un data URI?

Sí. Los navegadores tienen límites finitos para las URL de datos, distintos según la implementación; la aplicación o política de destino puede imponer otros menores. CSS y un <img> pueden usarlas, pero la barra de direcciones tiene restricciones de seguridad aparte. Usa imágenes pequeñas y prueba el destino. MDN documenta los límites.

¿Es gratis? ¿Necesito una cuenta?

Es gratis, y no hay cuenta, ni inicio de sesión, ni versión de prueba, ni marca de agua. Tampoco hay límite en el número ni en el tamaño de los archivos, porque no hay ningún servidor pagándolos: el trabajo lo hace tu propio dispositivo. El sitio lleva publicidad, que es lo que lo paga, y a los anuncios no se les da nada sobre tus imágenes.

¿Funciona sin conexión?

Sí. Carga la página una vez, desconéctate de internet y verás que sigue funcionando. Esa es además la forma más sencilla de demostrar que no se sube nada: una herramienta que mandara tus imágenes fuera a codificar se pararía en cuanto desenchufaras.