Decodificador de imagen Base64

Pega una cadena Base64 para previsualizar y descargar la imagen.

Tus datos no salen de tu dispositivo
La imagen decodificada aparecerá aquí

Cómo usar

  1. Pega una cadena de imagen codificada en Base64 en la zona de entrada. Puede incluir el prefijo data:image/… o contener solo los datos Base64 en bruto.
  2. Haz clic en Decodificar la imagen para previsualizarla.
  3. Haz clic en Descargar la imagen para guardarla como archivo PNG.

Preguntas frecuentes

¿Qué formatos Base64 se admiten?

Puedes pegar una cadena Base64 en bruto (la herramienta detecta el formato automáticamente) o un URI de datos completo como data:image/png;base64,iVBOR…. Tipos de imagen admitidos: PNG, JPEG, WebP, GIF, BMP y SVG.

¿Hay un límite de tamaño?

No hay un límite estricto, pero las cadenas Base64 muy voluminosas (más de 5-10 MB) pueden tardar en procesarse según tu dispositivo.

¿Cómo codificar una imagen a Base64?

Usa nuestra herramienta Conversor de imágenes a Base64 · simplemente arrastra y suelta una imagen para obtener su cadena Base64.

Qué es realmente Base64

Base64 es un esquema de codificación de binario a texto definido en el RFC 4648 (octubre de 2006). Usa un alfabeto de 64 caracteres (A-Z, a-z, 0-9, más + y /) para representar bytes arbitrarios como ASCII imprimible. Cada tres bytes de entrada binaria se convierten en exactamente cuatro caracteres de salida, porque el mínimo común múltiplo de 6 bits (un carácter Base64) y 8 bits (un byte) es 24. Esa proporción de cuatro a tres es también la razón por la que un archivo codificado en Base64 es aproximadamente un 33 % más grande que el binario original.

Cuando la longitud de la entrada no es un múltiplo de tres, Base64 rellena con = para que la salida sea siempre un múltiplo de cuatro caracteres: un byte final produce dos caracteres más ==; dos bytes finales producen tres caracteres más =. Algunos codificadores eliminan el relleno, así que un decodificador robusto necesita volver a rellenar antes de pasar la cadena a atob().

El RFC 4648 también define una variante segura para URL (a veces llamada base64url) que intercambia + por - y / por _. Los JWT la usan. Este decodificador normaliza ambos alfabetos para que no tengas que pensar en cuál te han pasado.

El esquema de URI de datos

El RFC 2397 (agosto de 1998) define el esquema de URL data:. La gramática completa es:

data:[<mediatype>][;base64],<data>

Un PNG en línea típico tiene este aspecto: data:image/png;base64,iVBORw0KGgo…. El token ;base64 es un marcador (nota la ausencia de un signo =) que le dice al navegador que decodifique la carga útil desde Base64 en lugar de tratarla como texto codificado por porcentajes. Si omites ;base64, los datos se interpretan como texto codificado para URL. Si omites el tipo de medio por completo, la especificación usa por defecto text/plain;charset=US-ASCII.

Este decodificador acepta cualquiera de las dos formas: pega una URI de datos completa o solo la carga útil Base64. Cuando solo se proporciona la carga útil, el formato se detecta a partir de los primeros bytes decodificados, como se ve más abajo.

Cómo se detecta el formato

Si pegas una cadena Base64 en bruto sin el prefijo data:image/…, la única forma de saber qué tipo de imagen es consiste en mirar los primeros bytes decodificados: cada formato de imagen común empieza con una firma reconocible, formalmente llamada «número mágico». Los navegadores hacen exactamente la misma comprobación cuando detectan los tipos MIME (el procedimiento está en el estándar MIME Sniffing de WHATWG). El atajo es que esas firmas se traducen a prefijos Base64 predecibles:

FormatoPrimeros bytes (hex)Prefijo Base64
PNG89 50 4E 47 0D 0A 1A 0AiVBORw0KGgo
JPEGFF D8 FF/9j/
GIF89a47 49 46 38 39 61R0lGODlh
WebP52 49 46 46 … 57 45 42 50UklGR
BMP42 4D («BM»)Qk
SVG (texto XML)empieza por <?xml o <svgPD94bWwg o PHN2Zw

La firma de PNG es una de las más ingeniosas del zoológico de formatos. El byte 89 tiene el bit alto activado, de modo que un repetidor de correo de solo 7 bits lo corrompe de forma visible. Los tres bytes siguientes deletrean PNG en ASCII, así que una persona que ejecute head sobre el archivo puede reconocerlo. Luego vienen un final de línea de DOS (0D 0A), un Ctrl-Z de MS-DOS que impide que el antiguo comando TYPE siga imprimiendo, y un avance de línea de Unix (0A): entre ellos detectan cualquier transporte común que «amablemente» reescriba los finales de línea.

De dónde vienen las imágenes Base64

La mayoría de las personas que llegan a una herramienta como esta están depurando algo. Situaciones comunes:

¿Deberías incorporar las imágenes en línea como Base64?

La disyuntiva solía ser más interesante. Bajo HTTP/1.1, cada imagen era una petición bloqueante independiente, e incorporar en línea un icono diminuto podía ahorrar una ida y vuelta real. Bajo HTTP/2 y HTTP/3, el argumento se ha estrechado mucho. Resumen honesto:

Ganas: cero peticiones HTTP adicionales, entrega atómica y artefactos autocontenidos que funcionan sin dependencias externas (demos de un solo archivo, correo, PDF renderizados en el servidor).

Pierdes: el navegador no puede almacenar en caché por separado una URI de datos en línea, así que la misma imagen en diez páginas se vuelve a descargar con cada respuesta HTML. El activo codificado es aproximadamente un 33 % más grande que el equivalente binario. Las CDN no pueden deduplicar las imágenes incrustadas en varias páginas. Las canalizaciones de optimización de imágenes (Cloudinary, Vercel, <Image> de Next.js) no pueden inspeccionar, comprimir, redimensionar ni servir formatos modernos como AVIF o WebP para los activos en línea. El navegador también tiene que decodificar primero el Base64 y la imagen en segundo lugar, lo que supone CPU adicional en cada renderizado.

Reglas generales razonables: incorpora en línea las imágenes de menos de unos 4 KB usadas en un solo lugar, los marcadores de posición de un solo píxel y las imágenes que necesitan viajar dentro de un archivo autocontenido. No incorpores en línea nada usado en más de una página, nada de más de unos 4 KB, nada que deba cargarse de forma diferida ni nada que se beneficie de la negociación de formato.

Seguridad: lo que Base64 no hace

Base64 es codificación, no cifrado. El §12 del RFC 4648 advierte explícitamente que «oculta visualmente» los datos, pero no proporciona «ninguna confidencialidad computacional»: cualquiera puede decodificarlo al instante. No codifiques contraseñas ni claves de API en Base64 pensando que es una medida de seguridad.

Dos detalles de seguridad que conviene conocer:

Más preguntas

¿Por qué mi cadena Base64 falla con «InvalidCharacterError»?

Tres causas habituales: espacios en blanco o saltos de línea perdidos de un copiar y pegar (el antiguo perfil MIME de Base64 ajusta las líneas a 76 caracteres, lo que el atob() de JavaScript rechaza); Base64 segura para URL con - y _ en lugar de + y /; o un relleno = final eliminado, de modo que la longitud no es un múltiplo de cuatro. Este decodificador limpia los espacios en blanco, normaliza el alfabeto y vuelve a rellenar antes de decodificar, pero las cadenas muy corruptas aún fallan.

¿Pierdo calidad al decodificar?

No. La decodificación es el inverso exacto de la codificación: recuperas byte a byte la imagen original. La descarga está en el formato que estuviera en el Base64 (PNG, JPEG, WebP, GIF, BMP o SVG), sin paso de recodificación.

¿Cuál es la URI de datos más grande que aceptará un navegador?

Según MDN, los límites actuales rondan los 512 MB en Chromium y Firefox, y los 2 GB en Safari/WebKit. En la práctica, el cuello de botella es la memoria y la CPU más que la especificación de la URL: los pegados de más de unos 10 MB empiezan a notarse lentos en un portátil típico.

¿Se envía algo a un servidor?

No. La decodificación ocurre íntegramente en tu navegador mediante la función nativa atob() y un Blob o una URI de datos asignada a una etiqueta <img>. No se sube nada; la página funciona sin conexión una vez cargada.

¿Por qué el Base64 de todos los JPEG empieza por /9j/?

Casi todos los archivos JPEG del mundo empiezan con los bytes FF D8 FF (el marcador de inicio de imagen seguido de otro byte de marcador). Cuando codificas en Base64 tres bytes que son todos FF con un D8 en medio, el patrón de bits 11111111 11011000 11111111 se divide en grupos de 6 bits 111111 111101 100011 111111: las posiciones 63, 61, 35, 63 del alfabeto Base64, que deletrean /9j/. El cuarto carácter varía entonces según el marcador que siga (E0 para JFIF, E1 para Exif), pero los tres primeros son universales.

Herramientas relacionadas

Conversor de imágenes a Base64 Codificador y decodificador Base64 gratuito en línea Compresor de imágenes gratuito en línea