開発ツール
画像をBase64に変換する方法・HTMLへのインライン埋め込み
画像をBase64エンコードしてHTMLやCSSに直接埋め込む方法は、小さなアイコンやロゴの表示に便利です。HTTPリクエストを削減し、ページの初期表示速度を改善できる場合があります。この記事では、画像のBase64変換の仕組み、使いどころ、具体的な実装方法を解説します。
画像のBase64変換とは
Base64は、バイナリデータ(画像ファイルなど)をASCII文字列に変換するエンコーディング方式です。画像をBase64に変換すると、A-Z、a-z、0-9、+、/の64種類の文字で構成されたテキスト文字列になります。この文字列をHTMLやCSSに直接埋め込むことで、外部ファイルを参照せずに画像を表示できます。
# Base64エンコードされた画像の例(一部省略) data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAB CAQAAAC1HAwCAAAAC0lEQVR42mNk+A8AAQUBAScY42YAAAAASUVORK5CYII=
メリット・デメリット
| メリット | デメリット |
|---|---|
| HTTPリクエスト数の削減 | ファイルサイズが約33%増加 |
| 外部ファイル不要で単一ファイルで完結 | ブラウザキャッシュが効かない |
| メール本文に画像を直接埋め込み可能 | HTMLファイルが肥大化 |
| CORSの制約を受けない | 保守性が低下(画像更新が面倒) |
Data URIの構文
Base64エンコードした画像をHTMLやCSSで使うには、Data URI(データURI)スキームを使います。構文は以下のとおりです。
data:[MIMEタイプ];base64,[Base64エンコード文字列] # 例: PNG画像 data:image/png;base64,iVBORw0KGgo... # 例: JPEG画像 data:image/jpeg;base64,/9j/4AAQSk... # 例: SVG画像 data:image/svg+xml;base64,PHN2ZyB4...
いつ使うべきか
使うべき場面:1KB〜10KB程度の小さなアイコン、ファビコン、ローディングスピナー、メールテンプレートへの画像埋め込み
避けるべき場面:10KBを超える大きな画像、頻繁に更新される画像、同じ画像を複数ページで使う場合
HTMLでの使い方
<!-- HTML imgタグでの使用 -->
<img src="data:image/png;base64,iVBORw0KGgo..."
alt="アイコン" width="16" height="16">
<!-- CSS背景画像としての使用 -->
<style>
.icon {
background-image: url('data:image/png;base64,iVBORw0KGgo...');
background-size: contain;
width: 24px;
height: 24px;
}
</style>
<!-- JavaScriptでの動的変換 -->
<script>
function imageToBase64(file) {
return new Promise((resolve) => {
const reader = new FileReader();
reader.onload = () => resolve(reader.result);
reader.readAsDataURL(file);
});
}
</script>サイズの目安
| 元のサイズ | Base64後のサイズ | 推奨 |
|---|---|---|
| 1KB以下 | 約1.3KB | Base64に最適 |
| 1〜10KB | 約1.3〜13KB | ケースバイケース |
| 10KB以上 | 約13KB以上 | 外部ファイル推奨 |
| 100KB以上 | 約133KB以上 | 必ず外部ファイルを使用 |
よくある質問
Base64エンコードするとファイルサイズはどれくらい増えますか?
約33%増加します。Base64は6ビットを8ビットの文字で表現するため、4/3倍(約1.33倍)のサイズになります。
SVG画像もBase64にすべきですか?
SVGはXMLベースのテキストデータなので、Base64にせずそのままHTMLに埋め込む(インラインSVG)方が効率的です。URLエンコードしてData URIに使う方法もあります。
Base64画像はSEOに影響しますか?
Base64画像はGoogle画像検索のインデックス対象外です。検索流入を狙いたい画像は通常のimgタグ+外部ファイルを使用してください。
データは外部に送信されますか?
いいえ。このツールではすべての変換処理がブラウザ上で行われるため、画像データがサーバーに送信されることはありません。