Base64 轉圖片

Base64 輸入0 字符

線上將 Base64 編碼資料還原為可預覽的圖片並下載,支援 PNG/JPG/WebP/GIF/SVG 等 7+ 常見圖片格式。自動辨識 Data URL 前綴,瀏覽器內直接預覽,適合介面除錯和編碼驗證。

相關推薦

什麼是 Base64 轉圖片?

Base64 轉圖片是 Base64 編碼的逆向過程:將 Base64 編碼的字串還原為原始的二進位圖片資料(如 PNG / JPG / WebP / GIF / SVG 等格式),並在瀏覽器內直接預覽或下載為本機圖片檔案。這是處理 API 回傳圖片、內嵌資源(Data URL)、郵件附件 Base64 等場景的必備工具。

**核心原理:** Base64 把二進位資料編碼為 64 個可列印 ASCII 字元(A-Z、a-z、0-9、+、/),轉圖片就是把這段 ASCII 字串還原回原始的二進位位元組流,再由瀏覽器按指定 MIME 類型(image/png 等)解析為圖片像素展示。Data URL(如 `data:image/png;base64,iVBORw0KGgo...`)則是 Base64 + MIME 前綴的組合形式,工具會自動辨識並處理。

**典型使用場景:** ①API 除錯:很多 API 回傳圖片驗證碼、使用者頭像、電子簽名時直接回傳 Base64 字串,前端需要還原檢視;②前端開發:Data URL 嵌入的小圖示(CSS background-image: url(data:image/png;base64,...))可貼到工具中檢視實際效果;③郵件附件還原:MIME Base64 編碼的附件可解碼回原圖片儲存;④爬蟲資料:擷取的圖片 Base64 可解碼後儲存為本機檔案;⑤OCR 前處理:解碼後用 OCR 工具識別圖片內容。

**支援的圖片格式:** 工具支援所有瀏覽器原生辨識的圖片 MIME 類型:PNG (image/png)、JPG/JPEG (image/jpeg)、WebP (image/webp)、GIF (image/gif)、SVG (image/svg+xml)、BMP (image/bmp)、AVIF (image/avif)、ICO (image/x-icon) 等。每種格式有不同的壓縮演算法和適用場景:PNG 無損適合圖示和截圖,JPG 有損適合照片,WebP 現代瀏覽器推薦,SVG 向量適合圖示和 logo。

**解碼安全性:** 所有解碼操作在瀏覽器內透過 JavaScript 完成(基於 `atob()` + `TextDecoder` 或 `Blob` API),圖片二進位資料不上傳任何伺服器。包含敏感資訊的 Base64 字串(如使用者頭像、內部截圖)可放心使用,關閉頁面後所有資料自動清除。

適用場景

  • 將 API 回傳的 Base64 圖片資料還原為可預覽和下載的圖片檔案
  • 驗證前端內嵌圖片資源(Data URL 格式)是否正確編碼
  • 除錯圖片上傳介面時確認 Base64 內容是否完整
  • 將 Base64 圖片儲存為本機 PNG/JPG 檔案用於設計或文件
  • 解碼郵件附件 Base64 編碼還原為圖片
  • 爬蟲擷取的圖片 Base64 還原後儲存到磁碟
  • 解碼 Data URL 驗證 SVG 圖示實際渲染效果
  • 把 OCR / AI 介面回傳的 Base64 圖片還原為本機檔案檢視

使用方法

  1. 貼上 Base64 編碼的圖片資料(支援帶或不帶 Data URL 前綴,如 data:image/png;base64,iVBORw0KG...)
  2. 工具自動偵測 MIME 類型並解碼(在 Data URL 中辨識,或根據內容頭嗅探)
  3. 右側即時顯示圖片預覽和檔案大小、尺寸資訊
  4. 點擊「下載」儲存為本機圖片檔案,或右鍵圖片「圖片另存為」
  5. 如解碼失敗,可手動指定 MIME 類型或使用 Base64 Clean 工具前處理

功能特點

  • 線上圖片預覽:解碼後直接在瀏覽器內顯示圖片,無需下載到本機
  • 多格式支援:支援 PNG / JPG / WebP / GIF / SVG / BMP / AVIF 等 7+ 常見圖片 MIME 類型
  • Data URL 自動辨識:自動剝離 data:image/png;base64, 前綴,提取純 Base64 內容解碼
  • 純 Base64 輸入:支援不帶前綴的純 Base64 字串,可指定 MIME 類型
  • 圖片檔案下載:支援一鍵儲存解碼後的圖片為本機 PNG/JPG 檔案
  • 即時字元統計:即時顯示輸入字元數、解碼後位元組數,方便評估圖片大小
  • 錯誤偵測:解碼失敗時提示具體錯誤位置(無效 Base64 字元、長度不對、MIME 不匹配)
  • 瀏覽器本機零上傳:所有解碼和預覽在瀏覽器內完成,不經過任何伺服器
  • 完全反向相容:與「圖片轉 Base64」工具配對使用,形成完整的雙向轉換工作流

程式碼範例

JavaScript:瀏覽器原生解碼 + Blob URL 預覽

javascript

使用瀏覽器原生 atob() + TextDecoder + Blob API 解碼 Base64 並在瀏覽器內顯示圖片。

// Base64 → 圖片(瀏覽器原生實作)
function base64ToImage(base64String, mimeType = 'image/png') {
  // 1. 去除 Data URL 前綴(如果有)
  const clean = base64String.replace(/^data:image\/\w+;base64,/, '');

  // 2. 瀏覽器原生 atob() 解碼為二進位字串
  const binary = atob(clean);

  // 3. 轉為 Uint8Array
  const bytes = new Uint8Array(binary.length);
  for (let i = 0; i < binary.length; i++) {
    bytes[i] = binary.charCodeAt(i);
  }

  // 4. 建立 Blob URL 用於 <img> 標籤預覽
  const blob = new Blob([bytes], { type: mimeType });
  const url = URL.createObjectURL(blob);

  // 5. 設定 img.src 即可預覽
  const img = document.createElement('img');
  img.src = url;
  img.onload = () => {
    console.log(`圖片尺寸: ${img.width}x${img.height}`);
    console.log(`檔案大小: ${bytes.byteLength} bytes`);
  };

  return { img, url, size: bytes.byteLength };
}

// 使用範例:
const result = base64ToImage('iVBORw0KGgoAAAANSUhEUgAAAAUA...');
document.body.appendChild(result.img);

// 釋放 Blob URL(避免記憶體洩漏)
setTimeout(() => URL.revokeObjectURL(result.url), 60000);

Python:base64 函式庫解碼並儲存圖片

python

Python 標準函式庫 base64 解碼 Base64 資料為圖片二進位流,再用 PIL/Pillow 或內建檔案操作儲存。

import base64
from pathlib import Path

def base64_to_image(base64_string: str, output_path: str, mime_type: str = 'image/png'):
    """將 Base64 字串解碼並儲存為圖片檔案"""

    # 1. 去除 Data URL 前綴
    if base64_string.startswith('data:image'):
        # 格式: data:image/png;base64,iVBORw0...
        header, base64_string = base64_string.split(',', 1)
        # 自動從 header 提取 MIME
        if 'image/' in header:
            mime_type = header.split('data:')[1].split(';')[0]

    # 2. 解碼
    image_bytes = base64.b64decode(base64_string)

    # 3. 儲存到檔案
    output_file = Path(output_path)
    output_file.parent.mkdir(parents=True, exist_ok=True)
    output_file.write_bytes(image_bytes)

    print(f"✅ 已儲存: {output_file}")
    print(f"   檔案大小: {len(image_bytes):,} bytes")
    print(f"   MIME 類型: {mime_type}")

    return output_file


# 使用範例:
# 1. 從 API 回應中取得的 Base64 字串
api_base64_response = "iVBORw0KGgoAAAANSUhEUgAA..."

# 2. 解碼並儲存
base64_to_image(api_base64_response, 'output/captcha.png')

# 3. 可選:用 PIL 進一步處理
try:
    from PIL import Image
    img = Image.open('output/captcha.png')
    print(f"圖片尺寸: {img.size}")
    img.save('output/captcha.png', optimize=True)
except ImportError:
    print('安裝 Pillow 以處理圖片: pip install Pillow')

Java:java.util.Base64 + ImageIO 解碼圖片

java

Java 標準函式庫 Base64 解碼圖片二進位流,配合 ImageIO / BufferedImage 處理圖片中繼資料。

import java.io.*;
import java.util.Base64;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;

public class Base64ToImage {
    public static void main(String[] args) throws Exception {
        String base64String = "iVBORw0KGgoAAAANSUhEUgAA...";
        String mimeType = "image/png";

        // 1. 去除 Data URL 前綴(如果有)
        if (base64String.startsWith("data:image")) {
            int commaIdx = base64String.indexOf(',');
            String header = base64String.substring(0, commaIdx);
            base64String = base64String.substring(commaIdx + 1);
            // 從 header 提取 MIME
            if (header.contains("image/")) {
                mimeType = header.substring(header.indexOf("data:") + 5, header.indexOf(";"));
            }
        }

        // 2. Base64 解碼
        byte[] imageBytes = Base64.getDecoder().decode(base64String);

        // 3. 儲存到檔案
        String extension = mimeType.substring("image/".length());
        File outputFile = new File("output." + extension);
        try (FileOutputStream fos = new FileOutputStream(outputFile)) {
            fos.write(imageBytes);
        }
        System.out.println("✅ 已儲存: " + outputFile.getAbsolutePath());
        System.out.println("   檔案大小: " + imageBytes.length + " bytes");

        // 4. (可選)讀取圖片中繼資料
        ByteArrayInputStream bais = new ByteArrayInputStream(imageBytes);
        BufferedImage image = ImageIO.read(bais);
        if (image != null) {
            System.out.println("圖片尺寸: " + image.getWidth() + "x" + image.getHeight());
        }
    }
}

常見問題

支援哪些圖片格式?

支援 PNG、JPG、WebP、GIF、SVG、BMP、AVIF、ICO 等所有瀏覽器原生辨識的圖片 MIME 類型。工具會根據 Data URL 中的 MIME 前綴或輸入特徵自動判斷,也可在介面手動指定 MIME 類型。選擇正確的格式可以確保瀏覽器正確解碼和顯示。

輸入需要帶 data:image/png;base64 前綴嗎?

不需要。工具支援兩種格式輸入:①純 Base64 字串(如 iVBORw0KGgoAA...),需要在介面選擇 MIME 類型(如 PNG / JPG);②Data URL 格式(如 data:image/png;base64,iVBORw0KGgo...),工具自動辨識前綴中的 MIME 類型並解碼。兩種輸入方式都支援。

可以在瀏覽器裡直接預覽嗎?

可以。解碼後的圖片會透過 Blob URL 在瀏覽器內直接顯示,支援線上預覽。確認內容無誤後,再下載為本機檔案或複製 Data URL 用於 HTML/CSS 內嵌。整個預覽過程無需網路請求。

和 Base64 轉檔案工具有什麼區別?

Base64 轉圖片專門針對圖片格式最佳化:①自動辨識 MIME 類型;②透過 Blob URL 在瀏覽器內直接預覽;③根據 MIME 自動設定檔案副檔名(.png / .jpg 等);④圖片尺寸資訊展示。Base64 轉檔案是通用工具,適合任意二進位檔案的還原和下載(如 PDF、ZIP、音訊等)。

解碼後圖片顯示不完整怎麼辦?

可能原因:①Base64 字串被截斷(檢查長度是否完整);②MIME 類型指定錯誤(如把 PNG 資料當作 JPG 解碼);③原始資料本身已損毀。建議:①確認來源 Base64 完整;②嘗試切換不同 MIME 類型;③用 Base64 Validate 工具檢查合法性。

Base64 體積會比原圖大多少?

Base64 編碼會使原始二進位資料體積增加約 33%(3 位元組 → 4 字元)。例如 100KB PNG 編碼後約 133KB Base64 字串。所以 Base64 適合小型圖片(< 10KB),大圖片建議使用 HTTP URL 直接傳輸。

支援 SVG 向量圖嗎?

支援。SVG 是一種基於 XML 的向量圖格式,Base64 編碼後可直接嵌入 HTML <img> 或 CSS background-image。解碼後會在瀏覽器內以向量方式渲染,可無損縮放。注意 SVG 中可能含 JavaScript 程式碼,使用時需注意 XSS 安全。

如何儲存為指定格式?

解碼後點擊下載按鈕,工具會根據解碼時的 MIME 類型自動添加對應副檔名(image/png → .png、image/jpeg → .jpg)。如需轉換格式(如 PNG → JPG),建議先解碼後用其他工具(如 Canvas / ImageMagick)轉換。

解碼後圖片是空白或損毀?

常見原因:①Base64 包含換行符或空格未清理——先用 Base64 Clean 工具前處理;②padding(=)缺失——本工具會自動補全;③MIME 類型與原資料不匹配——檢查來源 API 回傳的 Content-Type 或手動嘗試其他 MIME;④來源 Base64 在傳輸過程中被截斷——重新取得完整字串。

支援大圖片(>10MB)嗎?

支援,但瀏覽器對超大圖片渲染效能下降。10MB Base64(約 7.5MB 原圖)解碼通常流暢;超過 50MB 可能出現記憶體警告。建議:①先用 base64-clean 去除空白;②分區塊解碼大圖;③確認瀏覽器記憶體足夠(建議 4GB+)。

故障排查

解碼後圖片顯示空白

可能 MIME 類型不匹配或 Base64 不完整。檢查:1)來源 API 回傳的 Content-Type 標頭;2)手動切換 MIME 類型重試;3)確認 Base64 字串完整(長度符合預期)。

InvalidCharacterError 解碼失敗

Base64 字串包含非法字元(空格、換行、中文等)。先用 Base64 Clean 工具去除所有空白和非法字元,然後再轉換。

下載的圖片副檔名錯誤

檢查解碼時的 MIME 類型是否與原圖一致。如來源 API 回傳 image/jpeg 但 Base64 資料實際是 PNG,下載後副檔名會是 .jpg 但實際是 PNG 格式。建議從 MIME 前綴或 Content-Type 標頭確認原始格式。

解碼大圖片時瀏覽器卡死

超過 50MB 的 Base64 字串可能導致記憶體溢位。建議:①先用 base64-clean 工具去除空白字元;②分批解碼大圖(如按 tile 切分);③確認瀏覽器記憶體足夠(建議 4GB+ 可用記憶體);④使用服務端 Node.js / Python 指令碼處理超大圖片。

SVG 圖片解碼後無法顯示

SVG 是基於 XML 的向量格式,解碼後必須確保:1)MIME 類型使用 image/svg+xml;2)SVG 中不能含未轉義的特殊字元;3)部分瀏覽器對 SVG 中的 JavaScript 程式碼有安全限制。建議先用 XML 解析工具驗證 SVG 合法性。

術語表

Base64
用 64 個 ASCII 字元表示二進位資料的編碼方式,定義在 RFC 4648 中。本工具的逆向:把 Base64 字串還原為原始圖片二進位。
Data URL
RFC 2397 定義的內嵌 URL 格式:data:image/<MIME>;base64,<資料>。可直接在 HTML img src、CSS background-image 中使用。本工具自動辨識並剝離前綴。
MIME 類型
網際網路媒體類型,如 image/png、image/jpeg。瀏覽器根據 MIME 決定如何解析位元組流為圖片。
PNG
無損壓縮點陣圖格式,支援透明通道。常用於圖示、截圖、需要保留細節的圖片。Base64 後體積約為原 1.33 倍。
JPG/JPEG
有損壓縮點陣圖格式,適合照片。壓縮率高但不支援透明。Base64 後體積約為原 1.33 倍。
WebP
Google 開發的現代圖片格式,同時支援有損/無損壓縮和透明通道。比 PNG/JPG 小 25-35%。
Blob (Binary Large Object)
瀏覽器原生二進位物件,可包裝 Base64 解碼後的位元組流為圖片 Blob URL 用於預覽和下載。

8 種圖片格式對比表

不同圖片格式有不同的壓縮演算法、特性、適用場景。

格式MIME 類型壓縮類型透明支援典型場景
PNGimage/png無損圖示 / 截圖 / Logo
JPGimage/jpeg有損照片 / 風景圖
WebPimage/webp有損/無損現代 Web 推薦
GIFimage/gif無損 (256色)✅ (1-bit)小動畫 / 簡單圖示
SVGimage/svg+xml向量Logo / 圖示 / 插畫
BMPimage/bmp可選Windows 系統圖
AVIFimage/avif有損/無損下一代圖片格式
ICOimage/x-icon無損網站 favicon

Data URL vs HTTP URL 圖片載入對比

解碼後的圖片可作為 Data URL 直接嵌入到 HTML/CSS,與傳統的 HTTP URL 對比。

維度Data URLHTTP URL
HTTP 請求數01 次
快取複用易(CDN / 瀏覽器)
體積原圖 + 33%原圖大小
適合大小< 10 KB任意大小
壓縮傳輸否(已編碼)gzip / Brotli
CSP 限制可能一般允許
伺服器儲存無需需要
離線存取✅(檔案級)❌(需快取)

5 種 Base64 轉圖片常見錯誤對照表

遇到解碼錯誤時按下表快速定位問題。

錯誤現象可能原因解決方法
解碼失敗:InvalidCharacterError包含空格、換行、非 Base64 字元用 Base64 Clean 工具前處理
圖片顯示空白MIME 類型與原資料不匹配切換正確 MIME(如 PNG 資料用 image/png)
圖片顯示不完整Base64 字串被截斷重新取得完整 Base64 字串
Padding 報錯URL-safe Base64 省略 padding用 Base64 Padding 工具補齊 =
瀏覽器記憶體溢位圖片過大(> 50MB)分區塊解碼或使用圖片壓縮工具

Authoritative References