HTMLにBase64を埋め込む方法

Base64エンコードされた画像やフォントなどのアセットをdata URIでHTMLに直接埋め込む方法を解説。コード例、パフォーマンスのコツ、ベストプラクティスを紹介します。

Format

詳細な説明

HTMLにBase64データを埋め込むことで、画像、音声、フォントなどのリソースを個別のファイルリクエストなしにHTMLドキュメントに直接含めることができます。これはURLを受け付ける要素属性でdata URIスキームを使って行います。

画像:

<!-- Inline PNG image -->
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUA..."
     alt="Small icon" width="20" height="20" />

<!-- Inline JPEG -->
<img src="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQ..."
     alt="Photo thumbnail" />

<!-- Inline SVG (can also be Base64-encoded) -->
<img src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL..."
     alt="Vector graphic" />

ファビコン:

<link rel="icon" href="data:image/png;base64,iVBORw0KGgo..." />

埋め込みオーディオ:

<audio controls>
  <source src="data:audio/mp3;base64,SUQzBAAAAAAAI1RTU0UAAA..."
          type="audio/mp3" />
</audio>

アンカーダウンロードリンク:

<a href="data:text/csv;base64,TmFtZSxBZ2UKSm9obiwzMAo="
   download="data.csv">Download CSV</a>

パフォーマンスに関する考慮事項:

  • Base64画像は元のバイナリファイルより約33%大きくなります。ただし、HTTPリクエストを1つ削減できるため、非常に小さな画像(2-5KB未満)では正味でプラスになることがあります。
  • Base64で埋め込まれたリソースはブラウザが個別にキャッシュできません。HTMLページが読み込まれるたびに、埋め込みデータもドキュメントの一部として再ダウンロードされます。
  • 大きなBase64文字列はHTMLドキュメントサイズと初期パース時間を増加させます。ブラウザはレンダリング前にBase64文字列全体をデコードする必要があります。
  • gzip/Brotli圧縮により、Base64テキストは効果的に圧縮されるため、サイズ増加は部分的に軽減されます。

ビルドプロセスでのBase64 HTML生成: Webpackの url-loader やViteの ?inline クエリのようなツールは、ビルドステップで小さなアセットをBase64 data URIに自動変換できます。サイズ閾値を適用して、例えば4KB未満のファイルをインライン化し、大きなアセットには個別ファイルを使用します。

アクセシビリティ: 外部参照の画像と同様に、Base64埋め込み画像にも必ず意味のある alt テキストを提供してください。スクリーンリーダーはBase64画像データを分析できません。

ユースケース

関係者がオフラインで開ける単一の自己完結型HTMLレポートを作成し、すべてのグラフやロゴをBase64画像としてHTMLファイルに埋め込む場合に使用します。

試してみる — Base64 Encoder

フルツールを開く