Saltar al contenido principal

Convertir imagen a Base64

Imagen a Base64 convierte una imagen en un bloque de texto que puedes pegar directamente en tu código. Ese texto es un data URI, válido en CSS, HTML, JSON y Markdown, y contiene la imagen completa, así que la página no necesita un archivo aparte ni hace una petición extra por ella. El texto ocupa en torno a un 33% más que el archivo, algo que la página te muestra, porque ese precio es toda la razón para pensarlo antes de incrustar.

Solo local

Suelta aquí una imagen

o suéltalo en cualquier parte de la página · Elegir un archivo · 100 MB

Aceptados: JPG, JPEG, PNG, WebP, AVIF, GIF, SVG, ICO

Suelta un PNG, JPG, SVG o icono para obtener un URI de datos y fragmentos de código listos para usar.

¿Cómo funciona Convertir imagen a Base64?

Un data URI es un archivo incrustado en el lugar que lo referencia. En lugar de que src="logo.png" apunte a algo que el navegador debe descargar, los bytes de la imagen se escriben dentro del propio atributo. Sin petición, sin segundo archivo, sin nada que pueda dar 404.

Por qué base64 y no los bytes crudos

Porque los sitios donde van estas cadenas — un archivo CSS, un atributo HTML, un valor JSON — son texto, y un PNG no lo es. Sus bytes incluyen comillas, saltos de línea, bytes nulos y todo lo demás que terminaría una cadena o corrompería un documento. Base64, definido en el RFC 4648, convierte cada tres bytes en cuatro caracteres tomados de un alfabeto de 64 símbolos que es seguro en cualquier parte, y rellena con = cuando la entrada no se divide en partes iguales.

Cuatro caracteres por cada tres bytes es de donde sale el 33%. No es una sobrecarga que un codificador mejor pudiera eliminar; es aritmética.

Cuándo conviene incrustar

Para recursos pequeños que se usan de inmediato: un icono en una regla CSS, un espaciador de 1 × 1, un logotipo en un correo HTML donde las imágenes externas están bloqueadas por defecto, un marcador de posición que debe renderizarse antes de que cargue cualquier otra cosa. En todos estos casos, la petición que te ahorras cuesta más que el 33% que pagas — una petición arrastra DNS, establecimiento de conexión y latencia de ida y vuelta, y en una conexión móvil eso son decenas de milisegundos para un archivo que cabría en un solo paquete.

Cuándo es un error

Para todo lo grande o reutilizado. Un data URI no puede guardarse en caché de forma independiente: incrusta una imagen hero de 200 KB en tu hoja de estilos y cada visitante la vuelve a descargar con cada cambio de cualquier regla de ese archivo. Tampoco puede descargarse en paralelo — es parte del documento, así que se baja antes de que el documento termine, bloqueando justamente el renderizado que se suponía que debía acelerar. Y no puede cargarse en diferido, redimensionarse por una CDN ni servirse como WebP a los navegadores que lo soportan.

La frontera aproximada está en un par de kilobytes. Por debajo, incrustar suele ganar; por encima de unos 10 KB suele perder, y esta página te lo dice cuando cruzas ese umbral.

Content Security Policy

Un CSP estricto bloquea los data URI a menos que los permitas. Las imágenes necesitan img-src 'self' data: ; una fuente incrustada del mismo modo necesita que font-src permita también data:. Conviene saberlo antes de incrustar algo y descubrir que solo falta en producción, donde se aplica el CSP.

Base64 no es cifrado

Merece la pena decirlo sin rodeos, porque la confusión es habitual: base64 es una codificación, reversible por cualquiera, sin ninguna clave de por medio. Todo lo que se incruste así es tan legible como lo era antes. No oculta nada.

Dónde se ejecuta

En tu navegador. El archivo se lee con un FileReader y se codifica localmente — no se sube nada, y para una imagen que vas a incrustar en tu propio código fuente es lo único que tiene sentido.

Entrada

icon.png — 1.2 KB
image/png

Salida

data:image/png;base64,iVBORw0KGgo…
1.6 KB (+33%)
no HTTP request

¿Qué opciones y casos límite admite Convertir imagen a Base64?

Referencia técnica y opciones
ParámetroTipoValor predeterminadoComportamiento y casos límite
URI de datosdata:…predeterminadoEl URI base. Pégalo donde se espere una URL.
CSSbackground-image—Una reglista lista para usar en una hoja de estilos.
HTML<img>—Un elemento img con el atributo alt para que lo completes tú.
JSONstring—Entre comillas correctamente, para una API o un archivo de fixture.
Markdown![]()—Sintaxis de imagen, para un README que debe ser autónomo.
Solo Base64sin prefijo—Los bytes codificados solos, para un campo que añade su propio tipo MIME.
Coste de tamaño+33%—Cuatro caracteres de salida por cada tres bytes de entrada. Es aritmético, no sobrecarga.
CSPimg-src data:—Una política restrictiva bloquea los URI de datos hasta que se permita esto.

Preguntas frecuentes

¿Por qué el base64 es más grande que la imagen?

Porque base64 representa tres bytes con cuatro caracteres, lo que supone un aumento del 33% por construcción. El alfabeto tiene 64 símbolos, así que cada carácter transporta seis bits; tres bytes son veinticuatro bits, que son exactamente cuatro caracteres. Ningún codificador puede hacerlo mejor sin salirse de un alfabeto seguro para texto. Si el tamaño importa, comprime la imagen antes de codificarla — ahí es donde están los ahorros.

¿Conviene incrustar imágenes como data URI?

Las pequeñas, sí: iconos, espaciadores, un logotipo en un correo HTML, cualquier cosa de menos de un par de kilobytes que se necesite de inmediato. La petición que te ahorras suele costar más que el 33% que pagas. Las grandes, no: un data URI no puede guardarse en caché por separado, no puede descargarse en paralelo y bloquea el documento u hoja de estilos donde está incrustado — así que una imagen hero de 200 KB incrustada se vuelve a descargar con cada cambio del archivo que la contiene, y retrasa justamente el renderizado que se suponía que debía acelerar.

¿El cifrado base64 protege la imagen?

Base64 no es cifrado. Es una codificación de texto reversible y sin clave, diseñada para mover datos binarios por canales que solo aceptan texto. Cualquiera puede descodificarlo en la consola del navegador en una línea. No ofrece ninguna confidencialidad, y tratarlo como si la ofreciera es una fuente recurrente de incidentes de seguridad reales.

¿Por qué mi data URI está bloqueado por Content Security Policy?

Porque un CSP estricto trata data: como un origen que debe permitirse explícitamente. Para las imágenes necesitas que img-src incluya data:; para una fuente incrustada, font-src también lo necesita. Este fallo pasa fácilmente desapercibido en desarrollo, donde el CSP a menudo no se aplica, y solo aparece en producción — así que revisa la política antes de decidirte a incrustar.

¿Puedo descodificar un data URI y recuperar el archivo?

Sí. Todo lo que va después de la coma es base64; descodifícalo y tienes los bytes originales, byte a byte — la codificación es sin pérdidas en ambas direcciones. La herramienta Base64 Encode / Decode de este sitio se encarga de la parte de texto, y cualquier navegador renderiza un data URI pegado directamente en la barra de direcciones.

¿Se sube la imagen para codificarla?

No. El archivo lo lee el FileReader de tu navegador y se codifica en esta pestaña; no se transmite nada. Esto importa aquí de una forma pequeña y fácil de pasar por alto — las imágenes que la gente codifica en base64 suelen ser recursos de un proyecto en el que está trabajando, y no hay ninguna razón para que viajen a ninguna parte.