Base64エンコードサイズ計算ツールとは?
Base64は、バイナリデータを印字可能な64種類のASCII文字で表現するエンコード方式です。HTMLやCSSに画像を直接埋め込む(データURI)、メールにファイルを添付する(MIME)、JSONやトークンにバイナリデータを載せる、といった場面で広く使われています。Base64は入力3バイトを出力4文字に変換するため、エンコード後のデータは必ず元より大きくなり、その増加量はおよそ33%です。このツールを使えば、データをエンコードした後の正確なサイズがすぐにわかります。
使い方
元のファイルまたはデータのサイズを入力し、単位(バイト、KB、MB、GB)を選びます。さらに、出力に標準のパディング(末尾の=文字)を付けるかどうかを指定してください。ツールがエンコード後のサイズ(バイト単位)と、エンコードによって増加する割合(オーバーヘッド)を計算します。
計算式の解説
標準のBase64は、入力を3バイトごとのグループに分けて処理します。各グループはちょうど4文字になり、最後の端数グループは=で4文字に埋められます。したがって、パディングありのサイズは次の式で求められます。
$$\text{エンコード後バイト数} = 4 \times \left\lceil \frac{\text{入力バイト数}}{3} \right\rceil$$
パディングを無効にした場合は、実際に必要な文字だけが生成されます:\(\left\lceil \frac{4 \times \text{入力バイト数}}{3} \right\rceil\)。これにより、エンコードごとに1〜2文字のパディングを省けます。
計算例
1,000バイトのファイルがあるとします。3で割ると333.33、これを切り上げ(ceil)て334、これに4を掛けます:\(334 \times 4 = \textbf{1{,}336}\) バイト。オーバーヘッドは \((1336 - 1000) \div 1000 = 33.6\%\) です。パディングなしの場合は \(\left\lceil 4000 \div 3 \right\rceil = \left\lceil 1333.33 \right\rceil = 1{,}334\) バイト になります。
重要用語の解説
- Base64
-
任意のバイナリデータを64個の印字可能なASCII文字(A~Z、a~z、0~9、および
+と/)を使用して表現するバイナリからテキストへの符号化方式。メール本文、JSON、XML、URLなどテキストのみのチャネルを通じてバイナリコンテンツを安全に送受信できます。 - 3バイトグループ / 4文字ブロック
- Base64は固定されたグループで機能します。入力の3バイト(24ビット)ごとに4つの6ビットチャンクに分割され、各チャンクが1つのBase64文字にマッピングされます。したがって、3バイトの入力は常に4文字の出力になります。これが符号化のサイズ増加の根本原因です。
-
パディング(
=) -
入力長が3の倍数でない場合、最後のグループは不完全です。エンコーダは1つまたは2つの
=文字を追加し、出力長が4の倍数になるようにします。残りバイトが1つの場合は2つの=が追加され、残りバイトが2つの場合は1つの=が追加されます。 - オーバーヘッド
- Base64がもとのデータと比較して追加するサイズ。3バイトが4文字になるため、符号化されたデータはもとのサイズの約\(4/3 \approx 1.333\)倍、つまり約33%増加します(パディングと改行を含めると若干多くなります)。
- データURI
-
ファイルのBase64エンコード済みコンテンツをドキュメント内に直接埋め込むURLスキーム(例:
data:image/png;base64,iVBORw0KGgo…)。小規模なアセットに対して個別のネットワークリクエストの必要性を排除します。 - MIMEラインラッピング
- メール(MIME)符号化では、Base64出力は最大76文字の行に分割され、各行はCRLFで終了します。これらの改行は基本的な33%の拡張を超えて、わずかな追加サイズを加えます。
- ASCII文字
- 7ビットASCIIセットの単一文字。1バイトで符号化されます。Base64出力のすべての文字はASCII文字であるため、符号化された長さ(文字数)はそのバイト長と同じです。
よくある質問
Base64はなぜ必ず大きくなるの? データの6ビットごとを8ビットのASCII文字1つに対応させるため、効率が25%落ち、結果として約33%多いバイト数になります。
改行は含まれますか? いいえ。一部のMIMEエンコーダは76文字ごとに改行を挿入し、その分わずかに増えます。このツールは改行を含まない純粋なエンコード後サイズのみを計算します。
データURIの場合は? データURIにはdata:image/png;base64,のような接頭辞も加わります。URI全体の長さを知りたい場合は、この文字列の長さをエンコード後サイズに足してください。