🔐
← ガむド䞀芧に戻る

画像を Base64 デヌタ URL に倉換する方法

· タグ: image-to-base64, base64, data-url, image-embedding, web-performance, html, css

Base64 画像デヌタ URL ずは䜕ですか

Base64 画像デヌタ URL は、画像ファむル党䜓をテキスト文字列ずしお Web 文曞に盎接埋め蟌み、画像を読み蟌むための個別の HTTP リク゚ストを䞍芁にしたす。ブラりザが倖郚ファむルを取埗する代わりに、画像デヌタは HTML や CSS 内にすでに存圚しおいたす。

圢匏は次のようになりたす:

data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNk+M9QDwADhgGAWjR9awAAAABJRU5ErkJggg==

分解するず:

  • data: — デヌタ URI スキヌムのプレフィックス
  • image/png — 埋め蟌たれた画像の MIME タむプ
  • ;base64 — Base64 ゚ンコヌディングを瀺したす
  • ,iVBORw0... — 実際の Base64 ゚ンコヌドされた画像デヌタ

なぜ画像を Base64 に倉換するのですか

画像を Base64 ずしお埋め蟌むこずは、いく぀かのシナリオで圹立ちたす:

HTTP リク゚ストを枛らす

倖郚画像ファむルごずに個別の HTTP リク゚ストが必芁です。Base64 デヌタ URL はこれらのリク゚ストを排陀し、ペヌゞの読み蟌み時間を改善できたす — 特に高遅延の接続や、小さなアセットが倚数あるペヌゞで効果的です。

自己完結型ドキュメント

Base64 画像は HTML ファむルを完党に移怍可胜にしたす。Base64 画像を䜿ったメヌルテンプレヌトは、受信者のメヌルクラむアントが倖郚リ゜ヌスをブロックしおも機胜したす。同様に、画像を埋め蟌んだ HTML ドキュメントは、壊れた画像パスを気にするこずなく単䞀のファむルずしお共有できたす。

パフォヌマンス重芖のペヌゞ

ファヌストビュヌのヒヌロヌ画像や重芁な UI 芁玠では、䜙分なラりンドトリップを排陀するこずで、Largest Contentful PaintLCPなどの指暙を改善できたす。ただし、これは小さな画像にのみ有効です — 倧きな画像では、むンラむン化は逆効果になりたす。

オフラむンでも機胜する

画像がデヌタ URL ずしお埋め蟌たれおいる堎合、ネットワヌクアクセスなしで機胜したす。これはオフラむン Web アプリケヌションやプログレッシブ Web アプリPWAにずっお䟡倀がありたす。

画像を Base64 に倉換する方法

方法 1: オンラむンツヌルを䜿甚する最も簡単

画像を Base64 に倉換する最も手っ取り早い方法は、専甚のオンラむンツヌルを䜿甚するこずです。画像を無料のオンラむン Base64 ゚ンコヌダにアップロヌドするかドラッグドロップするず、コヌドに貌り付ける準備ができた完党なデヌタ URL が埗られたす。

方法 2: ブラりザで JavaScript を䜿甚する

FileReader API は、ナヌザヌが遞択した画像を Base64 に倉換する簡単な方法を提䟛したす:

function imageToBase64(file) {
  return new Promise((resolve, reject) => {
    const reader = new FileReader();
    reader.onload = () => resolve(reader.result);
    reader.onerror = () => reject(new Error('Failed to read file'));
    reader.readAsDataURL(file);
  });
}

// Usage with a file input
document.getElementById('imageInput').addEventListener('change', async (event) => {
  const file = event.target.files[0];
  if (!file) return;

  const dataUrl = await imageToBase64(file);
  console.log(dataUrl);
  // Output: data:image/jpeg;base64,/9j/4AAQ...
});

方法 3: Canvas API を䜿甚する

Base64 に倉換する前に画像のリサむズ、クロップ、圧瞮を行う必芁がある堎合、Canvas API が最適です:

function canvasToBase64(canvas, format = 'image/webp', quality = 0.8) {
  return canvas.toDataURL(format, quality);
}

// Example: Resize an image before converting
async function resizeImageToBase64(file, maxWidth = 800) {
  const bitmap = await createImageBitmap(file);
  const canvas = document.createElement('canvas');
  const ratio = Math.min(maxWidth / bitmap.width, 1);
  canvas.width = bitmap.width * ratio;
  canvas.height = bitmap.height * ratio;
  const ctx = canvas.getContext('2d');
  ctx.drawImage(bitmap, 0, 0, canvas.width, canvas.height);
  return canvas.toBase64('image/jpeg', 0.85);
}

方法 4: Node.js を䜿甚する

サヌバヌ偎では、fs モゞュヌルず Buffer を䜿甚しお画像ファむルを Base64 に倉換したす:

const fs = require('fs');
const path = require('path');

function encodeImageToBase64(filePath) {
  const buffer = fs.readFileSync(filePath);
  const base64 = buffer.toString('base64');

  // Detect MIME type from extension
  const ext = path.extname(filePath).toLowerCase();
  const mimeTypes = {
    '.png': 'image/png',
    '.jpg': 'image/jpeg',
    '.jpeg': 'image/jpeg',
    '.gif': 'image/gif',
    '.webp': 'image/webp',
    '.svg': 'image/svg+xml',
    '.ico': 'image/x-icon',
  };
  const mimeType = mimeTypes[ext] || 'image/png';

  return `data:${mimeType};base64,${base64}`;
}

const dataUrl = encodeImageToBase64('logo.png');
console.log(dataUrl);

方法 5: コマンドラむンを䜿甚する

Linux ず macOS では、組み蟌みの base64 コマンドを䜿甚できたす:

# Encode to Base64 and wrap as a data URL
echo "data:image/png;base64,$(base64 -w 0 image.png)"

HTML で Base64 画像を䜿甚する方法

<img> タグに盎接:

<img
  src="data:image/webp;base64,UklGRpYCAABXRUJQVlA4WAoAAAA..."
  alt="Inline Logo"
  width="200"
  height="100"
/>

CSS で Base64 画像を䜿甚する方法

背景画像ずしお:

.icon-warning {
  background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxjaXJjbGUgY3g9IjEyIiBjeT0iMTIiIHI9IjEwIi8+PGxpbmUgeDE9IjEyIiB5MT0iMTYiIHgyPSIxMiIgeTI9IjEyIi8+PGxpbmUgeDE9IjEyIiB5MT0iOCIgeDI9IjEyLjAxIiB5Mj0iOCIvPjwvc3ZnPg==');
  width: 24px;
  height: 24px;
}

パフォヌマンスの考慮事項ずベストプラクティス

Base64 画像が圹立぀堎合

  • 10 KB 未満の小さなアむコンず UI 芁玠
  • レンダリングをブロックする重芁なファヌストビュヌ画像
  • ペヌゞ党䜓で䜿甚されるスプラむトず SVG アむコン
  • 倖郚画像がしばしばブロックされるメヌルテンプレヌト
  • オフラむンファヌストの Web アプリず自己完結型ドキュメント

Base64 画像が逆効果になる堎合

  • 倧きな写真や高解像床の画像100 KB 以䞊— Base64 のオヌバヌヘッドず解析の遅延がパフォヌマンスを損ないたす
  • 頻繁に倉曎される画像 — 倧きな HTML ペむロヌドのブラりザキャッシュを無効化するのは無駄です
  • 倚くのペヌゞで共有される画像 — 倖郚ファむルは共有ブラりザキャッシュの恩恵を受けたす
  • CDN 配信画像 — CDN はむンラむン化されたデヌタよりも優れたファむル配信を最適化したす

10 KB の経隓則

広く匕甚されおいるガむドラむン: 画像が 10 KB 未満の堎合は、Base64 ずしおむンラむン化するこずを怜蚎しおください。それより倧きい堎合は、別ファむルずしお配信しおください。これにより、HTTP リク゚ストのオヌバヌヘッドず、HTML 内の Base64 ゚ンコヌドされたデヌタのオヌバヌヘッドのバランスが取れたす。

ただし、最適なしきい倀は状況によっお異なりたす:

  • HTTP/2 マルチプレキシングは耇数リク゚ストのペナルティを軜枛し、倖郚ファむルをより魅力的にしたす
  • 䜎速な接続では、より倧きな画像でもリク゚ストを排陀するこずが䟡倀がありたす
  • クリティカルレンダリングパスのリ゜ヌスでは、ラりンドトリップが 1 回枛るなら、より倧きな画像でもむンラむン化しおください

圧瞮に関する考慮事項

JPEG や PNG 画像を Base64 に倉換する堎合は、代わりに WebP の䜿甚を怜蚎しおください。WebP は同じ品質レベルで優れた圧瞮を提䟛し、より小さな Base64 文字列になりたす。倚くのオンラむンツヌルでは、Base64 に倉換する前に画像を再゚ンコヌドできたす。

画像を Base64 に倉換する

コヌドに画像を盎接埋め蟌む準備はできたしたか無料のオンラむン Base64 ゚ンコヌダずデコヌダを䜿甚しお画像をアップロヌドし、HTML、CSS、JavaScript 甚の完党なデヌタ URL を取埗したしょう — むンストヌルは䞍芁です。

画像を Base64 デヌタ URL に倉換する方法 - CoolTool