Cómo convertir Base64 a imagen
- Pega la cadena en el cuadro. Un valor largo guardado en un archivo se puede abrir con Abrir archivo .txt o soltándolo sobre el cuadro.
- Con En vivo activado, la imagen se decodifica mientras pegas. La línea de estado indica si el Base64 es válido, la variante (estándar o Base64URL), el número de bytes y el formato Detectado.
- Revisa la vista previa. Debajo verás el tipo, el tipo MIME, la extensión, el tamaño en bytes, las dimensiones en píxeles y el hash SHA-256.
- Ajusta el Nombre de archivo si quieres y pulsa Descargar archivo. Copiar como data URI te da en cambio una URI
data:limpia para HTML o CSS.
Ejemplo carga un PNG pequeño, para que veas cómo queda la salida antes de pegar tus propios datos.
Qué puedes pegar
El decodificador es tolerante con lo que rodea al Base64, porque las cadenas de imágenes casi nunca llegan limpias:
- Base64 sin más, tal como lo devuelve una API:
iVBORw0KGgoAAAANSUhEUg... - Una data URI:
data:image/png;base64,iVBORw0KGgo... - Código que contenga una:
background-image: url("data:image/svg+xml;base64,..."),<img src="data:image/jpeg;base64,...">, una imagen de Markdowno un campo JSON cuyo valor sea una data URI. La primera data URI se extrae automáticamente. - Base64 con saltos de línea de correos o de salidas estilo PEM, con espacios o saltos cada 64 o 76 caracteres.
- Base64 URL-safe con
-y_, cadenas sin relleno=y valores entre comillas.
Si el Base64 está en un campo JSON sin prefijo data:, copia solo el valor entre las comillas. Un documento JSON entero se rechaza como Base64 no válido, porque { no forma parte del alfabeto.
Cómo se detecta el formato
Todo formato de imagen empieza con una firma fija, sus bytes mágicos. La herramienta decodifica la cadena y compara los primeros bytes con esas firmas, así que una cadena etiquetada como image/png que en realidad contiene un JPEG se reconoce como JPEG. Las mismas firmas se ven en el propio Base64, algo útil cuando lees logs o volcados de bases de datos:
| Formato | Primeros bytes | El Base64 empieza por | Tipo MIME |
|---|---|---|---|
| PNG | 89 50 4E 47 0D 0A 1A 0A | iVBORw0KGgo | image/png |
| JPEG | FF D8 FF | /9j/ | image/jpeg |
| GIF | GIF89a / GIF87a | R0lGODlh / R0lGODdh | image/gif |
| WebP | RIFF, tamaño, WEBP | UklGR, con XRUJQ en los caracteres 12–16 | image/webp |
| SVG | <svg / <?xml | PHN2Zy / PD94bWwg | image/svg+xml |
| ICO | 00 00 01 00 | AAABAA | image/x-icon |
| BMP | BM | Qk | image/bmp |
| HEIC | tamaño, ftypheic | AAAA, y eXBoZWlj en el carácter 9 | image/heic |
| TIFF | II* / MM* | SUkqAA / TU0AKg | image/tiff |
También se detectan AVIF, JPEG XL y los archivos de cursor (.cur). Cuando una data URI declara un tipo y el contenido dice otra cosa, una nota muestra ambos. Si los datos no son una imagen, por ejemplo un PDF, la página lo indica y ofrece un botón Descargar como .pdf. La página de prefijos Base64 habituales lista las firmas de muchos más tipos de archivo.
Por qué no se ve la imagen
La cadena se cortó. Los valores Base64 se truncan por los límites de línea de los logs, el tamaño de las columnas de una base de datos, las celdas de una hoja de cálculo (32.767 caracteres) y al copiar y pegar desde una terminal. Un JPEG o un PNG se ve entonces solo en parte, o la vista previa falla. Si sobra o falta un carácter y la longitud resulta imposible, obtienes el error «Longitud incorrecta». Una cadena válida pero corta se decodifica sin errores, así que compara el Tamaño con lo que esperabas.
El tipo MIME de la data URI es incorrecto. Un data:image/png delante de bytes JPEG normalmente se sigue viendo en los navegadores, que analizan el contenido de las imágenes rasterizadas, pero otro software se fía de la etiqueta. Con SVG nunca se analiza el contenido: con cualquier tipo distinto de image/svg+xml no se renderiza en un <img>. La herramienta usa el formato real para la vista previa y la descarga.
Se cambiaron caracteres por el camino. Un + que pasó por la codificación de un formulario suele volver como espacio. Cuando una cadena de una sola línea tiene espacios y ningún +, el decodificador vuelve a convertir los espacios en +; cuando aparecen ambos, no puede distinguirlos y la imagen puede decodificarse en bytes equivocados. El JSON que escriben algunas bibliotecas escapa las barras como \/; el decodificador quita esos escapes y las secuencias literales \n por ti. Para casos más enrevesados, Reparar Base64 lista cada corrección que aplica.
Está codificada dos veces. Si los bytes decodificados son a su vez texto Base64, una nota lo indica y Decodificar de nuevo desenvuelve la siguiente capa. Atrás vuelve al paso anterior. Lo mismo funciona con data URI dentro de Base64 y con datos comprimidos con gzip o zlib.
El navegador no puede mostrar el formato. Las fotos HEIC de iPhone solo se ven en Safari 17 y posteriores, TIFF solo en Safari, y JPEG XL necesita Safari 17, Chrome 155 o Firefox 158 o más recientes. La vista previa indica entonces que el navegador no puede mostrarla, pero los bytes están intactos: Descargar archivo guarda un archivo válido que una app de fotos puede abrir.
No es una imagen. Una cadena Base64 que empieza por JVBER es un PDF y UEsDB es un archivo ZIP. Usa Base64 a archivo, que previsualiza documentos, archivos comprimidos, audio y más.
Guardar con la extensión correcta
Los campos Extensión y Tipo MIME se rellenan con el formato detectado hasta que los editas, así que un PNG se guarda como .png aunque nada en la entrada dijera «PNG». Windows y los formularios de subida juzgan un archivo por su extensión. Si renombras un WebP a .jpg, por dentro sigue siendo WebP, y el software estricto lo rechazará.
Puedes cambiar ambos campos, por ejemplo para guardar un icono como .cur o para escribir un tipo MIME propio. Un tipo MIME cambiado también vuelve a generar la vista previa con ese tipo.
SHA-256 y volcado hex
El hash SHA-256 bajo la vista previa se calcula sobre los bytes decodificados. Compáralo con un hash del remitente, un registro de base de datos o sha256sum image.png para demostrar que la imagen que guardaste es exactamente el archivo que se codificó, byte a byte. Para calcular el hash de otros datos, consulta la herramienta SHA-256.
Mostrar volcado hex muestra los primeros 512 bytes. Es la forma más rápida de inspeccionar un encabezado: el ancho y el alto de un PNG en el desplazamiento 0x10, el marcador Exif en un JPEG de cámara o el directorio de imágenes de un archivo ICO.
Privacidad: las imágenes se quedan en tu dispositivo
Las imágenes en Base64 suelen ser cosas que no subirías a cualquier web: capturas de un informe de errores, escaneos de un DNI o pasaporte, imágenes médicas exportadas de un portal del paciente, firmas capturadas en una tableta. Esta página las decodifica por completo en tu navegador. La Content Security Policy de la página bloquea las peticiones de red de sus scripts, salvo las del contador de visitas de Cloudflare, y Descargar archivo guarda desde una URL blob: local. El sitio no guarda nada de lo que pegas.
Decodificar una imagen Base64 en código
En Python, quita el prefijo, restaura el relleno y elige la extensión según la firma:
import base64, re
def save_image(b64: str, stem: str = "image") -> str:
b64 = re.sub(r"^data:[^,]*;base64,", "", b64.strip(), flags=re.I)
b64 = re.sub(r"\s+", "", b64).replace("-", "+").replace("_", "/")
data = base64.b64decode(b64 + "=" * (-len(b64) % 4))
if data.startswith(b"\x89PNG"):
ext = "png"
elif data.startswith(b"\xff\xd8\xff"):
ext = "jpg"
elif data.startswith(b"GIF8"):
ext = "gif"
elif data[:4] == b"RIFF" and data[8:12] == b"WEBP":
ext = "webp"
else:
ext = "bin"
with open(f"{stem}.{ext}", "wb") as f:
f.write(data)
return f"{stem}.{ext}"
En el navegador, convierte la cadena en un Blob y muéstralo mediante una URL de objeto:
function base64ToBlob(b64, type = "image/png") {
const bin = atob(b64.replace(/^data:[^,]*;base64,/, "").replace(/\s+/g, ""));
const bytes = Uint8Array.from(bin, c => c.charCodeAt(0));
return new Blob([bytes], { type });
}
img.src = URL.createObjectURL(base64ToBlob(str));
Hay más sobre leer y escribir datos binarios en Base64 en Python y Base64 en JavaScript. Para el sentido contrario, Imagen a Base64 codifica una imagen, con cambio de tamaño y conversión de formato.
Preguntas frecuentes
¿Necesito el prefijo data:image/png;base64,?
No. Funciona el Base64 sin más, y el tipo se lee de los bytes decodificados. Si pegas una data URI completa, el prefijo se quita solo y el tipo declarado se compara con el contenido.
¿Cómo sé en qué formato de imagen está una cadena Base64?
Mira los primeros caracteres: iVBORw0KGgo es PNG, /9j/ es JPEG, R0lGOD es GIF, UklGR es un archivo RIFF como WebP. Pégala arriba y el campo Detectado te dirá el formato.
¿Por qué la imagen decodificada aparece cortada por abajo?
La cadena Base64 se truncó al copiarla, registrarla en un log o guardarla. Los navegadores dibujan lo que pueden de un PNG o JPEG incompleto. Vuelve a copiar el valor desde el origen; ninguna herramienta puede recuperar bytes que no están en la cadena.
¿Es seguro decodificar aquí capturas de pantalla o fotos de documentos de identidad?
La decodificación se hace en el JavaScript de esta página, y su Content Security Policy bloquea todas las peticiones de red de la página salvo las del contador de visitas de Cloudflare, así que la imagen no se envía a ninguna parte. Puedes comprobarlo mirando el panel de red de las herramientas de desarrollo de tu navegador mientras decodificas.
¿Puede convertir la imagen decodificada a otro formato?
No, guarda exactamente los bytes que se codificaron. Para obtener una versión PNG, JPEG o WebP, descarga el archivo, pásalo por Imagen a Base64 con Convertir a y decodifica el resultado.