ToolActToolAct

画像 Base64 変換ツール

画像とBase64エンコードの相互変換、ドラッグアップロードとリアルタイムプレビュー対応

画像アップロード

画像をここにドラッグ、またはクリックしてファイルを選択

JPG、PNG、GIF、WebP、SVGなどのフォーマットに対応

Base64画像エンコードとは?

画像 Base64 ツールは、画像ファイルを Base64 文字列や Data URL に変換し、その文字列を再び画像として確認できるようにするツールです。小さなアイコン、プレースホルダー、メールテンプレート、CSS 背景、API テスト、単体デモなど、別ファイルを用意しにくい場面で便利です。Base64 は圧縮ではなく、通常はデータ量が増え、大きな写真や繰り返し使う画像ではキャッシュ効率も悪くなります。埋め込みデータ、CDN、通常の画像 URL のどれを使うべきか判断する前の変換と確認に向いています。

使い方

使い方

  1. 画像をドラッグまたはクリックしてアップロードすると、形式とサイズが自動検出されます
  2. 出力形式を選択:Data URL(コードにそのまま貼り付け可能)または純粋なBase64
  3. コピーボタンをクリックして、エンコード結果を必要な場所に貼り付けます
  4. 逆変換するには、Base64文字列を貼り付けて変換をクリックすると画像としてダウンロードできます

Base64から画像へ

  • data URLまたは純粋なBase64文字列を入力欄に貼り付け、変換するとデコードされた画像をダウンロード前にプレビューできます。
  • デコードに失敗した場合は、Base64テキストが完全であること、およびdata:image/... プレフィックスが正しく形成されていることを確認してください。

画像からBase64へ

  • HTMLやCSSに直接貼り付ける場合はData URLを、別のシステムがMIMEタイプを別途管理している場合は純粋なBase64を選択してください。
  • Base64画像は小さめに抑えましょう。大きな画像はテキストサイズが約3分の1増加し、HTML、CSS、JSONの管理が難しくなります。

利用シーン

画像を Data URL または純粋な Base64 にエンコード画像をブラウザに読み込み、完全な data:image URL または Base64 ペイロードのみをコピーするかを選択します。ファイルタイプ、寸法、元のサイズも同時に確認できます。バイナリ1キロバイトにつき約33%のサイズ増加を見込む必要があり、img-src 内のインライン Data URL は data: を許可しない厳格な CSP ルールでブロックされることに注意してください。
Base64 文字列を閲覧可能な画像にデコードData URL または生の Base64 文字列を貼り付けて画像に戻し、埋め込みや共有の前に寸法、Base64 長、推定デコードサイズを確認します。デコードされたバイトは Blob URL を介して書き込まれるため、結果は通常の HTTP で取得可能なアセットとなり、CDN キャッシュを汚染する文字列にはなりません。
HTML や CSS にインライン化する前のサイズ見積もり推定デコードバイト数と寸法を確認し、埋め込みアセットがインライン CSS に適した小ささか、通常のファイルとして配信すべきかを判断できます。インライン Base64 はブラウザが画像を個別にキャッシュすることも防ぐため、ヒーロー写真や大きなアイコンではリピート訪問時のパフォーマンスが低下する場合があります。
Base64 文字列としてのみ保存された画像を復元CSS background、JSON 設定、データベースフィールドからコピーした生の Base64 ブロックを貼り付けて PNG としてダウンロードし、元ファイルが利用できない場合に実際の画像を確認できます。レガシーメール署名から企業ロゴを復元し、通常のアセットとして再エクスポートするのにも便利です。
埋め込み前に Data URL の有効性をテスト古いスタイルシートからコピーした文字列をデコーダーにドロップして、MIME タイププレフィックス、カンマ、Base64 ペイロードがすべて intact であることを確認します。不用意な改行1つで一部のブラウザのパースが壊れる場合があるためです。デコードされたプレビューにより、間違ったパディングの Base64 文字列によるピクセルの破損も容易に発見できます。

仕組み

Base64 でエンコードされた画像は RFC 2397 で定義されたデータ URI です。スキームプレフィックス data:、MIME タイプ(例: image/png)、リテラル ;base64、そして 64 文字のアルファベット(A-Z、a-z、0-9、+、/)で構築されたペイロードで、末尾には = がパディングとして付加されます。エンコード処理ではバイナリストリームを 3 バイトずつ読み取り、4 文字を出力するため、ペイロードは固定比率 4/3(約 33%)増加し、バイト数が 3 の倍数でない場合は 1 または 2 個のパディング文字が追加されます。 ブラウザでのエンコードは FileReader.readAsDataURL から始まり、同じパイプラインを通じてファイルを処理し、<img src> や CSS background-image url() にそのまま使用できる完全な data: URL を返します。文字列のみを扱う btoa と atob は既にバイナリ化されたペイロードにのみ動作し(latin-1 のみのため、バイナリバイトは Uint8Array で変換が必要)、表示可能な画像へのデコードは atob → Uint8Array → 元の MIME タイプの Blob → URL.createObjectURL という流れで、通常の HTTP で取得可能なアセット URL に変換されます。 実際のトレードオフは帯域幅ではなくキャッシュです。HTML、CSS、JSON が存在する場所ごとにペイロードが複製されるため、アセットを個別にキャッシュできず、独自の ETag を持つこともできず、親ドキュメントの再ダウンロードごとに再取得されます。厳格な Content-Security-Policy ルールでは img-src または style-src に 'data:' が明示的に記載されていない限り data: URI がブロックされます。HTTP/2 のマルチプレックス化が普及して以降、小さなアイコンのインライン化が個別リクエストに勝ることは少なくなり、現代の経験則では約 2 KB 未満のみインライン化し、ヒーロー画像や再利用可能なスプライトはキャッシュ可能なファイルとして扱うのが一般的です。

  • データ URI スキーム: RFC 2397 形式 data:[<mime>][;base64],<payload>。カンマは必須であり、コピーペーストで最もよく見落とされる箇所です。
  • エンコードのオーバーヘッド: バイナリ 3 バイトが ASCII 4 文字になるため、ペイロードは 4/3 倍(約 33%)に増加し、最大 2 個の '=' パディング文字が追加されます。
  • ブラウザ API: ファイルには FileReader.readAsDataURL、既存のテキストペイロードには btoa/atob(latin-1 のみのため、バイナリには Uint8Array ブリッジが必要)。
  • デコードパス: atob → Uint8Array → new Blob([buf], {type}) → URL.createObjectURL により、凍結された文字列ではなく通常のフェッチ可能なアセット URL を取得できます。
  • CSP の注意点: 厳格な img-src または default-src ポリシーでは、data: キーワードが明示的にリストされていない場合にブロックされ、本番環境でインライン画像が表示されなくなります。
  • キャッシュのトレードオフ: インラインデータは独自の ETag キャッシュエントリを持たないため、HTTP/2 マルチプレックスでは約 2 KB を超えるデータはインライン化よりも個別リクエストの方が効率的です。

使用例

HTML での利用

<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII=" alt="1x1 transparent pixel" width="16" height="16" />

CSS での利用

.icon-search {
  width: 16px;
  height: 16px;
  background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxNiAxNiI+PHBhdGggZD0iTTYgMmE0IDQgMCAxIDAgMi4yNCA3LjMzbDMuMjEgMy4yMSAxLjQyLTEuNDItMy4yMS0zLjIxQTQgNCAwIDAgMCA2IDJ6Ii8+PC9zdmc+');
  background-size: contain;
}

JSON API での送信

POST /api/v1/avatar
Content-Type: application/json

{
  "userId": 10086,
  "avatar": {
    "mimeType": "image/png",
    "data": "iVBORw0KGgoAAAANSUhEUgAAAAUA..."
  }
}

// 注意: Base64 はペイロードが約 33% 増加します。100KB を超えるファイルでは multipart/form-data を推奨。

よくある質問

画像はアップロードされますか?

いいえ。画像はFileReader APIで読み込まれ、ブラウザ内でBase64エンコードされます。バイトデータがデバイスから外に出ることはありません。変換中にネットワークタブで確認できます。

Base64文字列が元ファイルより約33%長くなるのはなぜですか?

Base64は3バイトの入力を4文字のASCII文字で表すため、エンコード後のサイズはceil(file_size / 3) * 4となります。これが約33%のオーバーヘッドで、バイナリを印刷可能な文字で表すためのコストです。

結果をHTMLやCSSで使うにはどうすればいいですか?

data URIを使います。HTMLでは<img src="data:image/png;base64,...">、CSSではbackground-image: url(data:image/png;base64,...)のように記述します。ページでは完全なdata: URIが生成されます。小さなインラインアセットには便利ですが、HTML/CSSのファイルサイズが膨らみ、ブラウザの画像キャッシュが効かなくなります。

インライン化と外部リンクのサイズの境目はどこですか?

約5KB未満であれば、インライン化が有利です(HTTPリクエストを節約できます)。それを超える場合はキャッシュ効果のため別ファイルにすべきです。約50KBを超えるとHTMLが大きく膨らみます。ビルドツールごとに閾値は異なり、webpackのデフォルトは8KBです。

Base64文字列を画像にデコードできますか?

はい。data: URIまたは生のBase64文字列(image/* mimeタイプ付き)を貼り付けると、ページが画像を再構成しダウンロードを提供します。ソースコード内のインライン画像から元ファイルを取り出したい場合に便利です。

SVGやアニメーションGIFには対応していますか?

はい。SVGは直接エンコードするほか、URLエンコードされたテキストでも扱えます(SVG-XMLにはBase64より短くなります)。アニメーションGIFは1つのBase64文字列としてエンコードされ、結果も引き続きアニメーションします。WebP、AVIFなどの最新フォーマットも同様に動作します。

メール用に大きな写真をBase64エンコードすべきですか?

メール自体が添付ファイルをBase64でMIMEエンコードするため、事前にエンコードする必要はありません。Base64文字列をメール本文に貼り付けると、メッセージが大きくなり、ほとんどのクライアントで読めなくなるだけです。通常通りファイルを添付してください。