> base64 | 解碼 | PNG <

// 將Base64字串和資料URI解碼回PNG圖像 — 保留Alpha,即時預覽,一鍵下載

0 字元
🖼️

解碼後的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 → 圖像解碼器,它會檢查魔數並自動選擇正確的格式。絕不要強制使用與負載不符的格式 — 解碼後的檔案將是有效的位元組但無法閱讀。

// 其他語言