> base64 | 解碼 | PNG <
// 將Base64字串和資料URI解碼回PNG圖像 — 保留Alpha,即時預覽,一鍵下載
解碼後的PNG將在此顯示
位元完美
解碼後的PNG與原始檔案位元組完全相同 — Alpha、調色盤和色彩設定檔都能完整往返。
本地解碼
Base64負載在您的瀏覽器中使用atob()解碼。無需上傳到伺服器,不記錄您的PNG位元組。
即時預覽
在下載前立即看到解碼後的圖像、其尺寸和大約的檔案大小。
// 關於BASE64轉PNG
本工具接受的內容
- >資料URI:data:image/png;base64,iVBORw0KGgo…
- >原始PNG Base64負載(以iVBORw0KGgo開頭)
- >含嵌入空白 / 換行的Base64
- >標準RFC 4648字母表(+/,可選的=填充)
- >URL安全的Base64(-_) — 解碼時自動正規化
- >支援Unicode貼上 — 會去除BOM
常見使用情境
- >從DOM檢視器的資料URI儲存螢幕截圖
- >從資料URI CSS背景中擷取標誌
- >從JSON API回應中復原圖像
- >從資料庫TEXT欄位還原圖像
- >從電子郵件MIME部分還原PNG
- >檢查內嵌SVG中嵌入的圖示
- >除錯損壞的<img src="data:image/png;base64,…">標籤
Base64 → PNG解碼如何運作
解碼器會去除任何資料URI前綴,正規化空白和URL安全字元,然後呼叫atob()將每個4字元群組轉回3個二進位位元組。位元組陣列被包裝在MIME類型為image/png的Blob中,獲得物件URL並在<img>元素中呈現。因為Base64與二進位是雙射的,輸出與原始PNG位元組完全相同 — 解碼檔案的SHA-256會與原始檔案相符。
PNG資料URI範例:
data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8/5+hHgAHggJ/PchI7wAAAABJRU5ErkJggg==
效能與相容性
- >解碼的時間複雜度為O(n)(與負載長度成正比) — 可處理100 MB以上而無問題
- >使用原生瀏覽器atob() — 無沉重的JS墊片
- >當檢視器支援時,支援多幀APNG
- >適用於所有現代瀏覽器(Chrome、Firefox、Safari、Edge)
- >行動裝置響應式預覽,支援捏合縮放
- >下載使用Blob URL — 無中間伺服器往返
// 如何將BASE64解碼為PNG
步驟1:貼上
將Base64字串或完整的資料URI貼到輸入欄位
步驟2:解碼
點擊[DECODE] — PNG會立即在預覽中呈現
步驟3:檢查
在儲存前檢查尺寸、檔案大小和Alpha通道
步驟4:下載
點擊[DOWNLOAD .png]以將位元完全相同的PNG儲存到磁碟
// 程式碼範例 — BASE64轉PNG
JavaScript(瀏覽器)
// Decode Base64 → PNG Blob → download link
const b64 = 'iVBORw0KGgoAAAANSUhEUg...';
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/png' });
const url = URL.createObjectURL(blob);
window.open(url);
將原始Base64負載解碼為Blob並開啟。對於完整的資料URI,<img>標籤可直接接受。
Node.js
const fs = require('fs');
const b64 = 'iVBORw0KGgoAAAANSUhEUg...';
fs.writeFileSync('out.png', Buffer.from(b64, 'base64'));
使用Node內建的Buffer解碼Base64並寫入PNG檔案的單行程式碼。
Python
import base64
with open('out.png', 'wb') as f:
f.write(base64.b64decode('iVBORw0KGgoAAAANSUhEUg...'))
僅使用標準函式庫 — 將Base64文字解碼回PNG位元組。
PHP
<?php
file_put_contents('out.png', base64_decode('iVBORw0KGgoAAAANSUhEUg...'));
使用內建base64_decode()和file_put_contents()的單行程式碼。
Shell(macOS / Linux)
echo 'iVBORw0KGgoAAAANSUhEUg...' | base64 -d > out.png
POSIX的base64 -d / -D從stdin讀取文字並將解碼後的PNG寫入stdout。
// 常見問題 — BASE64轉PNG
問:什麼是Base64轉PNG解碼?
答:它將Base64編碼的PNG還原為其原始二進位形式。您貼上的字串是每3個二進位位元組對應4個ASCII字元;解碼器每次讀取4個字元,套用RFC 4648字母表查詢,並每組寫出3個位元組,直到字串結束。所得位元組陣列是一個完整的、有效的PNG檔案,您可以預覽、儲存或在任何接受普通PNG的地方使用。
問:我如何知道Base64字串確實是PNG?
答:每個PNG的前8個位元組是魔數簽名89 50 4E 47 0D 0A 1A 0A。當Base64編碼時,那8個位元組總是以iVBORw0KGgo開頭。因此任何以iVBORw0KGgo開頭的Base64字串都是PNG。其他格式有不同的前綴:/9j/是JPEG,R0lGOD是GIF,UklGR是WebP。我們的解碼器會從此魔數前綴自動偵測PNG,如果存在則會回退到資料URI中的MIME類型。
問:我可以貼上資料URI還是只能貼原始Base64?
答:兩者皆可。如果您的字串以data:image/png;base64,開頭,解碼器會自動去除前綴。如果您只貼上負載部分,我們會從魔數推斷PNG MIME類型。空白、換行符、歸位符和定位字元在解碼前會被正規化,因此您可以貼上美化列印的JSON回應而不破壞任何內容。
問:解碼後的PNG損壞了 — 為什麼?
答:常見原因:
• 字串被截斷 — Base64在某處被切斷(例如,您的複製來源有換行限制)。完整的PNG Base64以RU5ErkJggg==(IEND區塊)結尾;如果缺失,檔案不完整。
• URL安全字母表 — 如果字串使用-_代替+/(base64url),我們的工具會正規化;其他解碼器可能會拒絕。
• 雙重編碼 — PNG被Base64編碼了兩次。再解碼一次。
• 不是PNG — 負載實際上是JPEG或WebP。使用我們的通用Base64 → 圖像解碼器,它會自動偵測任何格式。
問:解碼回PNG會失去任何品質或透明度嗎?
答:不會。Base64是位元對位元可逆的轉換。解碼後的PNG與原始檔案位元組完全相同:Alpha通道、調色盤(PLTE)、透明度(tRNS)、色彩設定檔(iCCP/sRGB)、gamma(gAMA)以及實體像素尺寸(pHYs)都會被保留。解碼檔案的SHA-256雜湊值與原始檔案的雜湊值相符。如果您看到任何差異,變化發生在編碼之前,而不是在Base64往返期間。
問:我可以使用終端機將Base64解碼為PNG嗎?
答:可以。在macOS和Linux上:echo 'iVBORw0KGgo…' | base64 -d > out.png
(舊版macOS使用-D。)
在Windows PowerShell上:[IO.File]::WriteAllBytes('out.png', [Convert]::FromBase64String('iVBORw0KGgo…'))
如果字串是完整的資料URI,請先去除data:image/png;base64,前綴(大多數shell接受sed 's|^data:.*base64,||')。
問:Base64 PNG的輸入可以有多大?
答:我們在瀏覽器中解碼,因此限制是您裝置的記憶體 — 桌面裝置舒適地達到100 MB以上。一個100 MB的解碼PNG需要約135 MB的Base64文字,大多數瀏覽器可以毫無怨言地貼上。如果您正在處理非常大的科學或醫學PNG,請考慮伺服器端解碼,因為瀏覽器atob()效能在接近記憶體上限時會下降。
問:此解碼器可離線運作嗎?
答:可以。所有解碼都使用原生atob() + Uint8Array + Blob API,這些都內建於每個現代瀏覽器中。頁面載入一次後,您可以斷開網路並繼續解碼。無外部服務、無伺服器往返、無對您的圖像負載進行分析。
問:Base64 PNG與一般PNG檔案之間有什麼區別?
答:它們包含完全相同的位元組。一般的.png檔案是原始二進位;Base64 PNG字串是那些相同的二進位以64字元ASCII字母表重新書寫。Base64形式大33%,但可安全放入HTML屬性、JSON字串、CSS url()和電子郵件中。您無法將原始PNG位元組放入HTML — 它們包含空位元組和高位元字元,會破壞文字剖析器。Base64是解決方法。
問:Base64 PNG比單獨的.png檔案載入更快嗎?
答:僅對微小圖像而言。Base64節省一次HTTP往返,在新連線上可能為50–100毫秒 — 對於4 KB以下的關鍵UI圖示很有用。對於更大的圖像,以長效快取標頭提供的獨立.png檔案幾乎總是勝出,因為(a)gzip對Base64文字的壓縮效果不佳,(b)資料URI無法獨立快取,(c)它們會封鎖HTML剖析。將Base64用於首屏微型資產,而不是主要圖像。
問:我可以在不將資料上傳到任何地方的情況下將Base64解碼為PNG嗎?
答:可以 — 此工具100%在客戶端執行。您的Base64字串在您裝置上的JavaScript中解碼,在本地包裝在Blob中,並透過URL.createObjectURL()顯示。沒有任何東西被上傳。您可以在解碼時開啟瀏覽器開發者工具的網路分頁來驗證這一點 — 沒有請求發出。在初始頁面載入後,以離線(飛航模式)執行整個流程也可以運作。
問:我如何在生產程式碼中將Base64解碼為PNG?
答:在Node.js中:fs.writeFileSync('out.png', Buffer.from(b64, 'base64'))。在Python中:open('out.png','wb').write(base64.b64decode(b64))。在Go中:b, _ := base64.StdEncoding.DecodeString(b64); os.WriteFile("out.png", b, 0644)。在Java中:Files.write(Path.of("out.png"), Base64.getDecoder().decode(b64))。在Rust中:std::fs::write("out.png", base64::decode(b64)?)?。在PHP中:file_put_contents('out.png', base64_decode($b64))。每個執行環境的標準函式庫都附帶Base64解碼器 — 您很少需要第三方依賴項。
問:Base64轉PNG vs Base64轉JPG — 我應該使用哪個解碼器?
答:當Base64字串以iVBORw0KGgo開頭(或資料URI為data:image/png;base64,)時,使用Base64 → PNG。當字串以/9j/4AAQ或/9j/2wC開頭時,使用Base64 → JPG。如果您不確定,請使用我們的通用Base64 → 圖像解碼器,它會檢查魔數並自動選擇正確的格式。絕不要強制使用與負載不符的格式 — 解碼後的檔案將是有效的位元組但無法閱讀。