> base64 | decode | JPG <
// Base64 文字列や data URI を JPG / JPEG 写真にデコード — EXIF を保持、即時プレビュー、ワンクリックダウンロード
デコードされた JPEG がここに表示されます
再圧縮なし
デコーダーが出力する JPEG バイトはエンコードされたものとビット単位で同一 — 同じ品質、同じ EXIF、同じ DCT 係数。
ローカルデコード
Base64 文字列は atob() を使って完全にブラウザ内でデコードされます。アップロードなし、サーバーなし、ペイロードに対する解析なし。
ライブプレビュー
デコードされた写真と寸法を即座に確認 — ワンクリックで .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()、Uint8Array、Blob、URL.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 を出力させる(またはその逆)ことはできません。マジックバイトが真実を伝えます。迷った場合は、フォーマットを自動検出して正しい拡張子で保存する 汎用デコーダー をご利用ください。