Cómo calcular el tamaño de Base64
- Deja seleccionado Bytes → longitud Base64 y escribe el Tamaño original, eligiendo la Unidad. En Unidades, elige 1 KB = 1000 B o 1 KiB = 1024 B según cómo se midió tu tamaño.
- O suelta un archivo en el recuadro. Solo se lee su tamaño; el contenido del archivo nunca se abre.
- Lee la tabla: longitud con y sin relleno, la sobrecarga en porcentaje, un ajuste de línea personalizado (con Longitud de línea y Salto de línea), las líneas de un correo MIME, un cuerpo PEM, una URI
data:con el tipo MIME del archivo y una cadena JSON con comillas. - Para la dirección contraria, cambia a Longitud Base64 → bytes, introduce la longitud, indica si incluye saltos de línea y elige el caso de Relleno: conocido, desconocido (0–2 ×) o sin relleno. Si pegas el propio Base64, la respuesta es exacta.
La fórmula bajo la tabla repite el cálculo en vivo con tus propios números, algo útil para un comentario en el código o un ticket.
La fórmula y por qué es un 33 %
Base64 convierte cada 3 bytes en 4 caracteres, cada uno con 6 bits. El último grupo se rellena con = hasta completar 4 caracteres, así que:
padded = 4 × ⌈n ÷ 3⌉
unpadded = ⌈4n ÷ 3⌉
decoded = (characters × 3 ÷ 4) − number of "=" signs
Para entradas grandes es un aumento fijo del 33,3 %. En las muy pequeñas domina el relleno: un byte se convierte en cuatro caracteres, una sobrecarga del 300 %. La tabla siguiente se generó con el mismo código que ejecuta la calculadora:
| Original | Base64 con relleno | Sin relleno | MIME (76 + CRLF) | PEM (64 + LF) |
|---|---|---|---|---|
| 1 byte | 4 | 2 | 4 | 4 |
| 100 bytes | 136 | 134 | 138 | 138 |
| 1,000 bytes (1 KB) | 1,336 | 1,334 | 1,370 | 1,356 |
| 1,024 bytes (1 KiB) | 1,368 | 1,366 | 1,402 | 1,389 |
| 1,048,576 bytes (1 MiB) | 1,398,104 | 1,398,102 | 1,434,896 | 1,419,949 |
| 5,000,000 bytes (5 MB) | 6,666,668 | 6,666,667 | 6,842,106 | 6,770,834 |
Los saltos de línea se cuentan entre líneas, sin ninguno después de la última. Algunos codificadores, como base64.encodebytes de Python, terminan todas las líneas con \n, incluida la última, lo que añade un salto más. Para una data URI suma el prefijo: data:image/png;base64, son 22 caracteres.
Planificar con límites de tamaño
Límites típicos que conviene comprobar antes de que algo falle:
- Límites del cuerpo de la petición. Si un endpoint acepta 10.000.000 bytes y el archivo va en un campo JSON, el archivo puede tener como mucho unos 7.500.000 bytes, menos el resto del JSON. Cambia al modo inverso, introduce el límite y resta los nombres de tus campos.
- Columnas de base de datos y variables de entorno. Un
VARCHAR(255)admite el Base64 de 189 bytes como máximo; 190 bytes ya necesitan 256 caracteres. - Email. Los adjuntos MIME se cortan a 76 caracteres con CRLF, así que crecen alrededor de un 37 % en total. Por eso un límite de tamaño de mensaje solo admite archivos de alrededor del 73 % de ese tamaño. Base64 en el email tiene los detalles.
- Data URI en HTML o CSS. Cada imagen incrustada cuesta un tercio más que el archivo y no se puede cachear por separado. Rendimiento de las data URI explica cuándo sigue compensando.
Longitud de Base64 en código
Cualquier lenguaje puede calcularla sin codificar nada:
import math
def b64_len(n, padded=True):
return 4 * math.ceil(n / 3) if padded else math.ceil(4 * n / 3)
print(b64_len(1048576), b64_len(1048576, padded=False))
Eso imprime 1398104 1398102. En JavaScript, la longitud con relleno es 4 * Math.ceil(n / 3). Para comprobar una cadena que ya tienes, len(s) * 3 // 4 - s.count("=") da el tamaño decodificado, después de quitar los saltos de línea. Si el modo inverso indica una longitud imposible, como un resto de 1 al dividir entre 4, la cadena está dañada: pásala por el validador de Base64 para saber dónde.
Preguntas frecuentes
¿Cuál es la fórmula de la longitud de Base64?
Con relleno son 4 × ⌈n ÷ 3⌉ caracteres para n bytes. Sin relleno, ⌈4n ÷ 3⌉. Los saltos de línea, un prefijo data: o las comillas de JSON van aparte.
¿Cuánto ocupa un archivo después de decodificarlo de Base64?
Toma el número de caracteres Base64 (sin saltos de línea), multiplícalo por 3, divídelo entre 4 y resta un byte por cada = del final. Una cadena de 1.400.000 caracteres se decodifica en entre 1.049.998 y 1.050.000 bytes, según su relleno.
¿Cuál es el archivo más grande que puedo enviar a una API con un límite de 10 MB por petición?
Unos 7,5 MB si el límite es de 10.000.000 bytes, porque 10.000.000 × 3 ÷ 4 = 7.500.000, menos los campos JSON y encabezados que rodean la cadena. Usa el modo inverso con el límite como longitud para obtener la cifra exacta.
¿Gzip anula la sobrecarga de Base64?
En la transmisión, en gran parte. Gzip comprime Base64 hasta aproximadamente el tamaño de los bytes que codifica: 1.000.000 de bytes aleatorios dan 1.333.336 caracteres Base64, que con gzip quedan en 1.009.976 bytes. Los límites que cuentan el propio texto, como un campo JSON, una columna de base de datos o una petición sin comprimir, siguen viendo el tercio completo.