> base64 | 解碼 | JPG <
// 將Base64字串和資料URI解碼回JPG / JPEG照片 — 保留EXIF,即時預覽,一鍵下載
解碼後的JPEG將在此顯示
無重新壓縮
從解碼器輸出的JPEG位元組與編碼的內容位元組完全相同 — 相同的品質、相同的EXIF、相同的DCT係數。
本地解碼
您的Base64字串完全在瀏覽器中使用atob()解碼。無上傳、無伺服器、無分析負載。
即時預覽
立即看到解碼後的照片和其尺寸 — 一鍵下載為.jpg。
// 關於BASE64轉JPG
本工具接受的內容
- >資料URI:data:image/jpeg;base64,/9j/4AAQSkZ…
- >原始JPEG Base64負載(以/9j/開頭)
- >含嵌入空白 / 換行的Base64
- >標準RFC 4648字母表(+/,可選的=填充)
- >URL安全的Base64(-_) — 解碼時自動正規化
- >多部分JPEG(JFIF、EXIF、Adobe、SPIFF標記)
常見使用情境
- >從JSON API回應還原照片
- >從資料庫TEXT欄位擷取個人頭像
- >解碼儲存為資料URI的CMS圖像欄位
- >從電子郵件MIME部分重建照片
- >呈現透過WebSocket傳送的相機快照
- >除錯損壞的<img src="data:image/jpeg;base64,…">標籤
- >將照片快取為Base64的離線優先應用程式
Base64 → JPG解碼如何運作
解碼器會去除任何資料URI前綴,正規化空白和URL安全字元,然後呼叫atob()將每個4字元的Base64群組轉回3個二進位位元組。結果被包裝在MIME類型為image/jpeg的Blob中,並以<img>標籤預覽。因為Base64是二進位到文字的雙射轉換,輸出的JPEG與原始位元組完全相同 — 其SHA-256雜湊值相符,且不會失去品質。
JPEG資料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解碼為JPG
步驟1:貼上
將Base64字串或完整的資料URI貼到輸入欄位
步驟2:解碼
點擊[DECODE] — JPEG會立即呈現
步驟3:檢查
在儲存前檢查照片、其尺寸和檔案大小
步驟4:下載
點擊[DOWNLOAD .jpg]以將位元完全相同的JPEG儲存到磁碟
// 程式碼範例 — BASE64轉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>呈現。資料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從stdin讀取字串並將JPEG寫入磁碟。
// 常見問題 — BASE64轉JPG
問:什麼是Base64轉JPG解碼?
答:它將Base64編碼的JPEG還原為其原始二進位形式。解碼器每次從Base64字串讀取4個ASCII字元,在RFC 4648字母表中查詢它們,並每組輸出3個二進位位元組。所得位元組陣列是一個完整的、有效的JPEG檔案 — 相同的DCT係數、相同的Huffman表、相同的EXIF元資料、與編碼前相同的品質。
問:我如何判斷Base64字串確實是JPEG?
答:每個JPEG都以兩個魔數位元組FF D8(Start-Of-Image)開頭。當這些位元組被Base64編碼時,前4個字元始終是/9j/。因此任何以/9j/4AAQ(JFIF標頭)或/9j/2wC(許多使用Adobe APP14的智慧型手機相機)開頭的Base64字串都是JPEG。其他格式有不同的前綴:PNG為iVBORw0KGgo,GIF為R0lGOD,WebP為UklGR。
問:我可以直接解碼資料URI嗎?
答:可以。如果您的字串以data:image/jpeg;base64,開頭,解碼器會自動去除該前綴並處理負載。如果您只有原始Base64部分,我們的工具會偵測JPEG魔數(/9j/)並將解碼後的位元組包裝為image/jpeg以進行預覽。空白、換行和定位字元在解碼前都會被移除,因此您可以直接貼上美化列印的JSON值。
問:解碼會降低我的JPEG品質嗎?
答:不會。Base64解碼是純粹的二進位轉換 — 每個Base64字元確定性地對應6個位元,4個字元解碼為3個位元組。解碼後輸出的JPEG位元組與編碼的內容完全相同,因此品質就是原始JPEG儲存時的品質。解碼後檔案的SHA-256雜湊值將與原始檔案的雜湊值相符。如果您的解碼照片看起來比預期更差,品質損失發生在JPEG最初儲存時,而不是在Base64往返期間。
問:解碼後的JPG損壞了 — 可能出了什麼問題?
答:典型原因:
• 字串被截斷 — Base64在某處被剪裁。完整的JPEG以FF D9(End-Of-Image)結尾,在Base64中編碼為/9k=或2Q==。如果您的字串不是以其中一個模式加上可選填充結尾,則為不完整。
• 雙重編碼 — JPEG被Base64編碼了兩次。再解碼一次。
• URL安全字母表 — 如果字串使用-_代替+/,某些解碼器會拒絕。我們的工具會正規化兩者。
• 實際上是不同格式 — 負載是PNG或WebP。使用我們的通用Base64 → 圖像解碼器,它會自動偵測格式。
問:解碼後我的EXIF元資料會被保留嗎?
答:是的。EXIF APP1區段(相機型號、GPS、日期/時間、鏡頭、ISO、白平衡、方向等)是JPEG位元組串流的一部分。因為Base64是位元對位元可逆的,每個位元組 — 包括EXIF — 都會被還原。如果您出於隱私原因需要無EXIF的照片,請在解碼之後使用exiftool -all= out.jpg之類的工具或瀏覽器中基於canvas的重新匯出來移除元資料。
問:我可以在終端機中將Base64解碼為JPG嗎?
答:可以。在macOS和Linux上:echo '/9j/4AAQSkZJRgAB…' | base64 -d > out.jpg
(較舊的macOS base64使用-D。)
在Windows PowerShell上:[IO.File]::WriteAllBytes('out.jpg', [Convert]::FromBase64String('/9j/4AAQSkZJRgAB…'))
如果您的輸入是完整的資料URI,請先透過sed 's|^data:.*base64,||'管道處理以去除前綴。
問:我可以解碼多大的Base64 JPG?
答:最多到您瀏覽器的記憶體限制。一個100 MB的解碼JPEG需要約135 MB的Base64文字,現代桌面瀏覽器可以毫無問題地處理。行動瀏覽器可靠地處理最多約40 MB。對於極大的照片(來自中片幅相機的RAW轉換JPEG匯出),請考慮伺服器端解碼:base64 -d photo.b64 > photo.jpg比瀏覽器往返快得多。
問:解碼器可離線運作嗎?
答:是的,在初始頁面載入後可以。所有解碼都使用內建瀏覽器API(atob()、Uint8Array、Blob、URL.createObjectURL()),這些都不需要網路連線。您可以透過停用網路並繼續解碼來確認這一點 — 預覽和下載都會繼續運作。
問:Base64 JPEG是加密的或私密的嗎?
答:不是。Base64是一種編碼,不是加密。任何擁有您Base64字串的人都可以在毫秒內將其解碼回原始照片,而EXIF資料(包括GPS座標)也會一併取得。如果JPEG包含敏感資訊,請在套用Base64之前加密(AES-GCM、age、PGP),並且僅透過HTTPS傳輸該字串。
問:解碼是客戶端的 — 有任何內容被上傳嗎?
答:沒有任何內容被上傳。每個步驟 — 去除前綴、正規化空白、呼叫atob()、建構Blob、呈現<img>、觸發下載 — 都在您的瀏覽器中進行。在解碼時開啟瀏覽器開發者工具的網路分頁,您會看到對於您的Base64負載沒有任何對外請求。此工具對機密螢幕截圖、個人照片和受管制的資料都是安全的。
問:我如何在生產程式碼中將Base64解碼為JPG?
答:在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))。
問:Base64轉JPG vs Base64轉PNG — 我應該使用哪個?
答:看Base64字串的前綴。如果以/9j/開頭,是JPEG — 使用Base64 → JPG。如果以iVBORw0KGgo開頭,是PNG — 使用Base64 → PNG。您無法強制JPEG解碼器輸出PNG(或反之亦然);魔數會說出真相。有疑問時,請使用通用解碼器,它會自動偵測格式並以正確的副檔名儲存。