Como calcular o tamanho em Base64
- Mantenha Bytes → tamanho em Base64 selecionado, digite o Tamanho original e escolha a Unidade. Em Unidades, escolha 1 KB = 1000 B ou 1 KiB = 1024 B conforme a forma como o seu tamanho foi medido.
- Ou arraste um arquivo para a caixa. Só o tamanho é lido; o conteúdo do arquivo nunca é aberto.
- Leia a tabela: comprimento com e sem preenchimento, o aumento em porcentagem, uma quebra personalizada (ajuste Tamanho da linha e Quebra de linha), linhas de e-mail MIME, um corpo PEM, uma URI
data:com o tipo MIME do arquivo e uma string JSON com aspas. - Para a direção contrária, mude para Tamanho em Base64 → bytes, informe o comprimento, diga se ele inclui quebras de linha e escolha o caso de Preenchimento: conhecido, desconhecido (0–2 ×) ou nenhum. Colar o próprio Base64 dá uma resposta exata.
A fórmula ao vivo abaixo da tabela repete o cálculo com os seus próprios números, o que é útil para um comentário no código ou um ticket.
A fórmula e por que são 33%
O Base64 transforma cada 3 bytes em 4 caracteres, cada um carregando 6 bits. O último grupo é completado com = até 4 caracteres, então:
padded = 4 × ⌈n ÷ 3⌉
unpadded = ⌈4n ÷ 3⌉
decoded = (characters × 3 ÷ 4) − number of "=" signs
Para entradas grandes, isso é um aumento fixo de 33,3%. Nas muito pequenas, o preenchimento domina: um byte vira quatro caracteres, um aumento de 300%. A tabela abaixo foi gerada com o mesmo código que a calculadora executa:
| Original | Base64 com preenchimento | Sem preenchimento | 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 |
As quebras de linha são contadas entre as linhas, sem nenhuma depois da última. Alguns codificadores, como o base64.encodebytes do Python, terminam todas as linhas com \n, inclusive a última, o que acrescenta mais uma quebra. Para um data URI, some o prefixo: data:image/png;base64, tem 22 caracteres.
Planejando em torno de limites de tamanho
Limites típicos que vale conferir antes que algo falhe:
- Limites do corpo da requisição. Se um endpoint aceita 10.000.000 bytes e o arquivo vai em um campo JSON, o arquivo pode ter no máximo cerca de 7.500.000 bytes, menos o resto do JSON. Mude para o modo inverso, informe o limite e subtraia os nomes dos seus campos.
- Colunas de banco de dados e variáveis de ambiente. Um
VARCHAR(255)comporta o Base64 de no máximo 189 bytes; 190 bytes já precisam de 256 caracteres. - E-mail. Anexos MIME são quebrados em 76 caracteres com CRLF, então crescem cerca de 37% no total. Um limite de tamanho de mensagem, portanto, só admite arquivos com cerca de 73% desse tamanho. Base64 no e-mail traz os detalhes.
- Data URIs em HTML ou CSS. Cada imagem embutida custa um terço a mais que o arquivo e não pode ser armazenada em cache separadamente. Desempenho de data URIs explica quando ainda vale a pena.
Comprimento em Base64 no código
Qualquer linguagem calcula isso sem 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))
Isso imprime 1398104 1398102. Em JavaScript, o comprimento com preenchimento é 4 * Math.ceil(n / 3). Para verificar uma string que você já tem, len(s) * 3 // 4 - s.count("=") dá o tamanho decodificado, depois de remover as quebras de linha. Se o modo inverso indicar um comprimento impossível, como resto 1 na divisão por 4, a string está danificada: passe-a pelo validador de Base64 para descobrir onde.
Perguntas frequentes
Qual é a fórmula do comprimento em Base64?
Com preenchimento são 4 × ⌈n ÷ 3⌉ caracteres para n bytes. Sem preenchimento, ⌈4n ÷ 3⌉. Quebras de linha, um prefixo data: ou aspas de JSON vêm por cima.
Qual o tamanho de um arquivo depois de decodificado do Base64?
Pegue o número de caracteres Base64 (sem quebras de linha), multiplique por 3, divida por 4 e subtraia um byte para cada = no final. Uma string de 1.400.000 caracteres decodifica para algo entre 1.049.998 e 1.050.000 bytes, dependendo do preenchimento.
Qual o maior arquivo que posso enviar por uma API com limite de 10 MB por requisição?
Cerca de 7,5 MB se o limite for 10.000.000 bytes, porque 10.000.000 × 3 ÷ 4 = 7.500.000, menos os campos JSON e cabeçalhos ao redor da string. Use o modo inverso com o limite como comprimento para obter o número exato.
O gzip desfaz o aumento do Base64?
Na transmissão, em grande parte. O gzip comprime o Base64 de volta para perto do tamanho dos bytes que ele codifica: 1.000.000 de bytes aleatórios geram 1.333.336 caracteres Base64, que ficam com 1.009.976 bytes depois do gzip. Limites que contam o próprio texto, como um campo JSON, uma coluna de banco de dados ou uma requisição sem compressão, continuam vendo o terço inteiro.