ToolAct工具行動

圖片 Base64 轉換工具

圖片與 Base64 編碼互轉,支援拖拽上傳和實時預覽

上傳圖片

拖拽圖片到此處,或點選選擇檔案

支援 JPG、PNG、GIF、WebP、SVG 等格式

什麼是 Base64 圖片編碼?

圖片 Base64 工具可以把圖片檔轉成 Base64 文字或 Data URL,也能把這類字串解碼回可預覽的圖片。它適合處理小圖示、佔位圖、電子郵件模板、CSS 背景、API 測試或不方便附帶獨立圖片檔的展示案例。Base64 不是壓縮格式,通常會讓資料量變大;用在大照片或大量重複資源時,也可能影響快取效率。這個工具主要用於快速轉換、檢查與除錯,實際上線時仍要判斷內嵌資料、CDN 檔案或普通圖片 URL 哪一種更合適。

使用方式

使用方式

  1. 拖曳或點選上傳圖片,自動偵測類型與尺寸
  2. 選擇輸出格式:Data URL(可直接用於程式碼)或純 Base64
  3. 點選複製按鈕,將編碼結果貼到需要的位置
  4. 如需反向轉換,貼上 Base64 字串後點選轉換即可下載圖片

Base64 轉圖片

  • 將 data URL 或純 Base64 字串貼入輸入框,轉換後即可預覽解碼圖片並下載。
  • 若解碼失敗,請檢查 Base64 文字是否完整,並確認 data:image/... 前綴格式是否正確。

圖片轉 Base64

  • 若結果要直接貼入 HTML 或 CSS,請選擇 Data URL;若其他系統已分別儲存 MIME 類型,則選擇純 Base64。
  • 建議 Base64 圖片保持較小尺寸;大型圖片會讓編碼後的文字量增加約三分之一,使 HTML、CSS 或 JSON 負載更難維護。

使用場景

將圖片編碼為 Data URL 或純 Base64將圖片載入瀏覽器,選擇複製完整的 data:image URL 或僅 Base64 負載,同時檢查檔案類型、尺寸和原始大小。每 KB 二進位資料約有 33% 的體積開銷,且內嵌在 img-src 中的 Data URL 會被未列出 data: 的嚴格 CSP 規則封鎖。
將 Base64 字串解碼回可檢視的圖片貼上 Data URL 或純 Base64 字串,將其轉回圖片,並在嵌入或分享前檢查尺寸、Base64 長度和預估解碼大小。解碼後的位元組透過 Blob URL 寫入,因此結果是一般可透過 HTTP 存取的資源,而非可能汙染 CDN 快取的字串。
在 HTML 或 CSS 內嵌前預估大小查看預估的解碼位元組數及尺寸,以便決定嵌入的資源是否夠小適合內嵌 CSS,還是應作為實際檔案傳遞。內嵌 Base64 也會阻止瀏覽器單獨快取圖片,這會影響首圖和大型圖示的回訪效能。
還原僅儲存為 Base64 字串的圖片貼上從 CSS 背景、JSON 設定或資料庫欄位複製的純 Base64 資料,下載 PNG 以在沒有原始檔案時檢查實際圖片。這也適用於從舊版電子郵件簽名中還原企業 Logo,然後再將其重新匯出為一般資源。
嵌入前測試 Data URL 是否有效將從舊樣式表複製的字串放入解碼器,確認 MIME 類型前綴、逗號和 Base64 負載是否完整,因為單一多餘的換行符在某些瀏覽器中會破壞解析步驟。解碼預覽也便於發現因錯誤填充的 Base64 字串導致的像素損壞。

技術原理

Base64 編碼的圖片是 RFC 2397 定義的 Data URI:開頭為 `data:` 架構前綴,接著 MIME 類型(如 `image/png`),然後是 `;base64` 字面值,最後是以 64 個字元(A-Z、a-z、0-9、+、/)組成的字母表建立的負載,`=` 作為尾端填充。編碼時每 3 個位元組取一組,輸出 4 個字元,因此負載固定膨脹 4/3 倍(約 33%),當位元組數不是 3 的倍數時再加上 1 或 2 個填充字元。 在瀏覽器中,編碼從 `FileReader.readAsDataURL` 開始,它透過相同的流程串流檔案,傳回完整的 `data:` URL,可直接放入 `<img src>` 或 CSS 的 `background-image url()`。純字串的 `btoa` 和 `atob` 原生函數僅適用於已是二進位的負載(僅限 latin-1,因此二進位位元組必須透過 `Uint8Array` 轉換)。解碼回可檢視的圖片則經過 `atob` 轉為 `Uint8Array`,再封裝為具有原始 MIME 類型的 `Blob`,`URL.createObjectURL` 建立的控制代碼即成為一般可透過 HTTP 存取的資源。 實際的取捨不在頻寬而在快取。負載的每次出現都隨著 HTML、CSS 或 JSON 的出現位置被複製,因此資源無法被單獨快取、無法擁有自己的 ETag,並且每次父文件重新下載時都會跟著重新下載。嚴格的 Content-Security-Policy 規則也會封鎖 `data:` URI,除非 `img-src` 或 `style-src` 中明確列出 `'data:'`。自 HTTP/2 多工傳輸上線以來,內嵌小圖標很少比獨立請求更有效率,因此現代經驗法則是僅在 ~2 KB 以下時內嵌,並將首圖和可重複使用的精靈圖保留為可快取的檔案。

  • Data URI 方案:RFC 2397 格式 `data:[<mime>][;base64],<payload>`;逗號是必要的,也是最常見的複製貼上失敗點。
  • 編碼開銷:3 個二進位位元組變成 4 個 ASCII 字元,因此負載膨脹 4/3 倍(約 33%),再加上最多 2 個 '=' 填充字元。
  • 瀏覽器 API:`FileReader.readAsDataURL` 用於檔案;`btoa`/`atob` 用於已是文字的負載(僅限 latin-1,二進位需要 `Uint8Array` 橋接)。
  • 解碼路徑:`atob` → `Uint8Array` → `new Blob([buf], {type})` → `URL.createObjectURL` 得到一般可存取的資源 URL,而非凍結的字串。
  • CSP 陷阱:嚴格的 `img-src` 或 `default-src` 策略會封鎖 `data:`,除非明確列出該關鍵字,這會在正式環境中靜默破壞內嵌圖片。
  • 快取取捨:內嵌資料沒有獨立的 ETag 或快取條目,因此 HTTP/2 多工傳輸通常在超過 ~2 KB 的內容上比內嵌更有效率。

範例

在 HTML 中使用

<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII=" alt="1x1 transparent pixel" width="16" height="16" />

在 CSS 中使用

.icon-search {
  width: 16px;
  height: 16px;
  background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxNiAxNiI+PHBhdGggZD0iTTYgMmE0IDQgMCAxIDAgMi4yNCA3LjMzbDMuMjEgMy4yMSAxLjQyLTEuNDItMy4yMS0zLjIxQTQgNCAwIDAgMCA2IDJ6Ii8+PC9zdmc+');
  background-size: contain;
}

透過 JSON API 傳輸

POST /api/v1/avatar
Content-Type: application/json

{
  "userId": 10086,
  "avatar": {
    "mimeType": "image/png",
    "data": "iVBORw0KGgoAAAANSUhEUgAAAAUA..."
  }
}

// 注意:Base64 會讓資料量膨脹約 33%;超過 100KB 的檔案建議改用 multipart/form-data。

常見問題

圖片會上傳嗎?

不會。圖片是透過 FileReader API 在你的瀏覽器中讀取並進行 Base64 編碼,位元組從未離開你的裝置。可在轉換過程中打開「網路」分頁確認。

為什麼 Base64 字串比原檔案大約多 33%?

Base64 把每 3 位元組轉成 4 個 ASCII 字元,所以編碼後大小 = ceil(file_size / 3) * 4,大約多出 33%,這是把二進位轉成可列印文字所付出的代價。

結果要怎麼用在 HTML 或 CSS 裡?

使用 data URI:HTML 中寫成 <img src="data:image/png;base64,...">,CSS 中寫成 background-image: url(data:image/png;base64,...)。頁面會直接幫你產生完整的 data: URI。適合內嵌極小的素材,但會撐大 HTML/CSS 並繞過瀏覽器的圖片快取。

什麼大小該內嵌、什麼大小該外連?

5 KB 以下時內嵌通常划算(省下一次 HTTP 請求)。再大的檔案應該獨立存放,以利快取。超過 50 KB 時,內嵌會明顯撐大 HTML。各種建置工具門檻不同,例如 webpack 預設為 8 KB。

可以把 Base64 字串解碼還原成圖片嗎?

可以。貼上 data: URI 或原始 Base64(需指定 image/* MIME 類型),頁面會還原圖片並提供下載。當你在原始碼中看到內嵌圖片想取回原檔時很實用。

支援 SVG 與動態 GIF 嗎?

支援。SVG 可直接編碼,也可改用 URL-encoded 文字(對 SVG-XML 來說比 Base64 更短)。動態 GIF 會編碼成單一 Base64 字串,結果仍可正常播放動畫。WebP、AVIF 等現代格式也是同樣的處理方式。

寄電子郵件時要不要先把大照片轉成 Base64?

不需要。電子郵件本身的 MIME 機制已經會把附件以 Base64 編碼,預先編碼只會讓信件更大,且大多數郵件客戶端無法閱讀內文中的 Base64。直接用附件上傳即可。