> base64 | decode | JPG <

// Base64 文字列や data URI を JPG / JPEG 写真にデコード — EXIF を保持、即時プレビュー、ワンクリックダウンロード

0 文字
🖼️

デコードされた JPEG がここに表示されます

[FAITHFUL]

再圧縮なし

デコーダーが出力する JPEG バイトはエンコードされたものとビット単位で同一 — 同じ品質、同じ EXIF、同じ DCT 係数。

[PRIVATE]

ローカルデコード

Base64 文字列は atob() を使って完全にブラウザ内でデコードされます。アップロードなし、サーバーなし、ペイロードに対する解析なし。

[INSTANT]

ライブプレビュー

デコードされた写真と寸法を即座に確認 — ワンクリックで .jpg としてダウンロード。

// BASE64 TO JPG について

このツールが受け付ける形式

  • >Data URI: data:image/jpeg;base64,/9j/4AAQSkZ…
  • >生の JPEG Base64 ペイロード(/9j/ で始まる)
  • >空白や改行を含む Base64
  • >標準 RFC 4648 アルファベット(+/、任意の = パディング)
  • >URL セーフ Base64 (-_) — デコード時に自動正規化
  • >マルチパート JPEG(JFIF、EXIF、Adobe、SPIFF マーカー)

よくある用途

  • >JSON API レスポンスから写真を復元
  • >データベースの TEXT カラムからプロフィールアバターを抽出
  • >data URI として保存された CMS の画像フィールドをデコード
  • >メール MIME パートから写真を再構築
  • >WebSocket 経由で送信されたカメラスナップショットを表示
  • >壊れた <img src="data:image/jpeg;base64,…"> タグのデバッグ
  • >オフラインファーストアプリで写真を Base64 としてキャッシュ

Base64 → JPG デコードの仕組み

デコーダーは data URI プレフィックスを除去し、空白と URL セーフ文字を正規化してから、atob() を呼び出して各 4 文字の Base64 グループを 3 バイトのバイナリに戻します。結果は MIME タイプ image/jpeg の Blob にラップされ、<img> タグでプレビュー表示されます。Base64 は全単射のバイナリ ↔ テキスト変換のため、出力される JPEG は元とビット単位で同一 — SHA-256 ハッシュが一致し、品質の劣化もありません。

JPEG Data URI の例:

data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEASABIAAD/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQYGBcUFhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSj/wAALCAABAAEBAREA/8QAFQABAQAAAAAAAAAAAAAAAAAAAAv/xAAUEAEAAAAAAAAAAAAAAAAAAAAA/9oACAEBAAA/AKp//9k=

パフォーマンスと互換性

  • >デコードはペイロード長に対して O(n) — 100 MB+ も問題なく処理
  • >ネイティブの atob() + Uint8Array を使用 — サードパーティライブラリなし
  • >主要カメラメーカーの EXIF 入り JPEG をサポート
  • >Chrome、Firefox、Safari、Edge、モバイルブラウザで動作
  • >モバイル端末でのピンチズーム対応プレビュー
  • >Blob URL 経由でダウンロード — サーバー往復なし

// BASE64 TO JPG のデコード手順

📋

ステップ 1: 貼り付け

Base64 文字列または完全な data URI を入力フィールドに貼り付け

🔍

ステップ 2: デコード

[DECODE] をクリック — JPEG が即座にレンダリングされます

📊

ステップ 3: 確認

保存前に写真、寸法、ファイルサイズを確認

💾

ステップ 4: ダウンロード

[DOWNLOAD .jpg] をクリックすると、ビット単位で同一の JPEG をディスクに保存します

// コード例 — BASE64 TO JPG

JavaScript (ブラウザ)

// Decode Base64 → JPEG Blob → preview
const b64 = '/9j/4AAQSkZJRgAB...';
const bin = atob(b64);
const arr = new Uint8Array(bin.length);
for (let i = 0; i < bin.length; i++) arr[i] = bin.charCodeAt(i);
const blob = new Blob([arr], { type: 'image/jpeg' });
document.getElementById('preview').src = URL.createObjectURL(blob);

生の Base64 JPEG ペイロードをデコードし、Blob にラップして <img> でレンダリングします。Data URI は src に直接設定できます。

Node.js

const fs = require('fs');
const b64 = '/9j/4AAQSkZJRgAB...';
fs.writeFileSync('out.jpg', Buffer.from(b64, 'base64'));

Node 組み込みの Buffer を使って Base64 テキストを JPEG ファイルにデコードします。

Python

import base64
with open('out.jpg', 'wb') as f:
    f.write(base64.b64decode('/9j/4AAQSkZJRgAB...'))

標準ライブラリのみ — Base64 → JPEG バイト → ファイル。

PHP

<?php
file_put_contents('out.jpg', base64_decode('/9j/4AAQSkZJRgAB...'));

base64_decode() と file_put_contents() を使うワンライナー。

Shell (macOS / Linux)

echo '/9j/4AAQSkZJRgAB...' | base64 -d > out.jpg

POSIX の base64 -d は標準入力から文字列を読み取り、JPEG をディスクに書き出します。

// FAQ — BASE64 TO JPG

Q: Base64 から JPG へのデコードとは?

A: Base64 エンコードされた JPEG を元のバイナリ形式に戻す処理です。デコーダーは Base64 文字列から 4 文字ずつ読み取り、RFC 4648 アルファベットに照らし、グループごとに 3 バイトのバイナリを出力します。結果のバイト配列は完全で有効な JPEG ファイル — エンコード前と同じ DCT 係数、同じハフマンテーブル、同じ EXIF メタデータ、同じ品質です。

Q: Base64 文字列が本当に JPEG かをどう見分ける?

A: すべての JPEG はマジックバイト FF D8(Start-Of-Image)で始まります。このバイト列を Base64 エンコードすると、最初の 4 文字は常に /9j/ になります。したがって /9j/4AAQ(JFIF ヘッダー)または /9j/2wC(Adobe APP14 を使う多くのスマートフォンカメラ)で始まる Base64 文字列は JPEG です。他のフォーマットは異なるプレフィックスを持ちます: PNG は iVBORw0KGgo、GIF は R0lGOD、WebP は UklGR

Q: data URI を直接デコードできる?

A: はい。文字列が data:image/jpeg;base64, で始まる場合、デコーダーはそのプレフィックスを自動的に除去してペイロードを処理します。生の Base64 部分のみがある場合、本ツールは JPEG のマジックナンバー (/9j/) を検出し、デコードされたバイトを image/jpeg としてプレビューにラップします。空白、改行、タブはデコード前にすべて除去されるため、整形済みの JSON 値をそのまま貼り付けられます。

Q: デコードは JPEG の品質を低下させる?

A: いいえ。Base64 デコードは純粋なバイナリ変換 — 各 Base64 文字は決定的に 6 ビットにマップされ、4 文字が 3 バイトにデコードされます。出力される JPEG バイトはエンコードされたものとビット単位で同一のため、品質は元の JPEG が保存されたときの品質そのままです。デコードされたファイルの SHA-256 ハッシュは元のハッシュと一致します。もしデコード後の写真が想定より劣化して見える場合、その品質劣化は JPEG が最初に保存された時点で発生しており、Base64 往復中ではありません。

Q: デコードされた JPG が壊れている — 何が問題?

A: 典型的な原因:
文字列の切れ — Base64 がどこかで切り取られた。完全な JPEG は FF D9(End-Of-Image)で終わり、Base64 では /9k= または 2Q== にエンコードされます。これらのパターンに任意のパディングを加えたもので終わっていない場合、文字列は不完全です。
二重エンコード — JPEG が Base64 で 2 回エンコードされた。もう一度デコードしてください。
URL セーフアルファベット — 文字列が +/ ではなく -_ を使っていると、一部のデコーダーは拒否します。本ツールは両方を正規化します。
実際は別のフォーマット — ペイロードが PNG や WebP。フォーマットを自動検出する 汎用 Base64 → 画像デコーダー をご利用ください。

Q: デコード後も EXIF メタデータは保持される?

A: はい。EXIF APP1 セグメント(カメラ機種、GPS、日時、レンズ、ISO、ホワイトバランス、向きなど)は JPEG バイトストリームの一部です。Base64 はビット単位で可逆のため、EXIF を含むすべてのバイトが復元されます。プライバシーの観点で EXIF を除去した写真が必要な場合、デコード後に exiftool -all= out.jpg やブラウザでの canvas 再エクスポートで削除してください。

Q: ターミナルで Base64 を JPG にデコードできる?

A: はい。macOS と Linux:
echo '/9j/4AAQSkZJRgAB…' | base64 -d > out.jpg
(古い macOS の base64 では -D。)
Windows PowerShell:
[IO.File]::WriteAllBytes('out.jpg', [Convert]::FromBase64String('/9j/4AAQSkZJRgAB…'))
入力が完全な data URI の場合、まず sed 's|^data:.*base64,||' でプレフィックスを除去してパイプしてください。

Q: Base64 JPG はどれくらい大きいものまでデコードできる?

A: ブラウザのメモリ上限までです。100 MB のデコード済み JPEG は約 135 MB の Base64 テキストを必要としますが、現代のデスクトップブラウザは問題なく処理します。モバイルブラウザは約 40 MB まで安定しています。極端に大きな写真(中判カメラからの RAW 変換 JPEG エクスポート)の場合、サーバーサイドデコードを検討してください: base64 -d photo.b64 > photo.jpg はブラウザ往復よりはるかに高速です。

Q: デコーダーはオフラインで動作する?

A: はい、初回ページ読み込み後は可能です。デコードはすべてブラウザ組み込み API(atob()Uint8ArrayBlobURL.createObjectURL())を使用し、いずれもネットワーク接続を必要としません。ネットワークを無効にしてデコードを続けることで確認できます — プレビューとダウンロードの両方が引き続き動作します。

Q: Base64 JPEG は暗号化されていてプライベート?

A: いいえ。Base64 はエンコードであって暗号化ではありません。Base64 文字列を持っている人なら誰でもミリ秒で元の写真にデコードでき、EXIF データ(GPS 座標を含む)もそのまま付いてきます。JPEG に機密情報が含まれている場合、Base64 を適用する前に暗号化(AES-GCM、age、PGP)し、文字列は必ず HTTPS 経由でのみ転送してください。

Q: デコードはクライアントサイドですか — 何かアップロードされる?

A: 何もアップロードされません。プレフィックスの除去、空白の正規化、atob() の呼び出し、Blob の生成、<img> のレンダリング、ダウンロードの開始 — すべてのステップがブラウザ内で行われます。デコード中にブラウザ開発者ツールのネットワークタブを開けば、Base64 ペイロードに対する外向きリクエストがゼロであることが確認できます。本ツールは機密スクリーンショット、個人写真、規制対象データに対して安全です。

Q: 本番コードで Base64 を JPG にデコードするには?

A: Node.js: fs.writeFileSync('out.jpg', Buffer.from(b64, 'base64'))Python: open('out.jpg','wb').write(base64.b64decode(b64))Go: b, _ := base64.StdEncoding.DecodeString(b64); os.WriteFile("out.jpg", b, 0644)Java: Files.write(Path.of("out.jpg"), Base64.getDecoder().decode(b64))Rust: std::fs::write("out.jpg", base64::decode(b64)?)?Ruby: File.binwrite('out.jpg', Base64.decode64(b64))PHP: file_put_contents('out.jpg', base64_decode($b64))

Q: Base64 から JPG と Base64 から PNG — どちらを使うべき?

A: Base64 文字列のプレフィックスを見てください。/9j/ で始まるなら JPEG — Base64 → JPG を使用。iVBORw0KGgo で始まるなら PNG — Base64 → PNG を使用。JPEG デコーダーに PNG を出力させる(またはその逆)ことはできません。マジックバイトが真実を伝えます。迷った場合は、フォーマットを自動検出して正しい拡張子で保存する 汎用デコーダー をご利用ください。

// OTHER LANGUAGES