Base64 轉 WebP

把 Base64 編碼的 WebP 圖片儲存為檔案,或者把 Base64 格式的 PNG、JPEG 轉換為 WebP。這種現代格式在相近畫質下通常更小。

完全在瀏覽器中執行,不會上傳任何資料。

使用方法

  1. 貼上 Base64 字串或 data:image/webp;base64 URI,其他圖片格式同樣可以。
  2. 檢視預覽、識別出的格式和解碼後的大小。
  3. 下載格式保持為 WebP 即可轉換;如果要按解碼結果原樣儲存,請選擇「原始檔案」。
  4. 下載 .webp 檔案,並與原圖比較大小。

如何識別 WebP 資料

WebP 存放在 RIFF 容器中,WAV 音訊用的也是這種封裝。檔案以 ASCII 文字 RIFF 開頭,所以 Base64 以 UklGR 起始;幾個位元組之後的 WEBP 標記表明容器裡裝的是圖片而不是聲音。圖片資料有三種形式:有損(VP8)、無損(VP8L),以及支援透明、動畫或後設資料的擴充套件格式(VP8X)。MIME 型別為 image/webp。

為什麼要轉換為 WebP

根據 Google 的測試,在畫質相當的情況下,有損 WebP 比 JPEG 小約 25% 到 34%,無損 WebP 比 PNG 小約 26%。與 JPEG 不同,WebP 支援 Alpha 通道,帶透明背景的 Logo 和貼紙也能順利轉換。目前所有主流瀏覽器都能顯示 WebP。

當圖片以內嵌方式使用時,體積變小會帶來雙重好處:圖片更輕,HTML、CSS 或 JSON 中的 Base64 字串也更短。轉換完成後,可以用 WebP 轉 Base64 重新編碼新檔案。

結果並不總是更小。很小的圖示、已經充分壓縮的照片以及顏色很少的扁平圖形,有時反而會變大,這時 PNG 或 JPG 更合適。在修改構建流程之前,也可以先用本工具快速測試某張圖片能節省多少:貼上 Base64 格式的 PNG 或 JPEG,下載 WebP,再比較兩者的大小。

用 Pillow 批次轉換

如果要在伺服器上批次處理,用 Python 的 Pillow 庫幾行程式碼就能完成同樣的轉換:

import base64, io
from PIL import Image

img = Image.open(io.BytesIO(base64.b64decode(b64_string)))
img.save('output.webp', 'WEBP', quality=80)

常見問題

WebP 能保留透明背景嗎?

能。WebP 在有損和無損模式下都支援完整的 Alpha 通道,轉換後透明區域依然透明。

動態 WebP 能保留動畫嗎?

以「原始檔案」格式下載即可保留所有幀。轉換需要經過畫布,只能得到一幀靜態畫面。

轉換後的 WebP 一定比原圖小嗎?

不一定。大尺寸照片和截圖通常會變小,但很小或已經高度最佳化的圖片可能反而變大。可以把工具顯示的解碼大小與下載檔案的大小進行對比。

有些軟體打不開 WebP 檔案怎麼辦?

較舊的看圖軟體和辦公軟體可能不支援 WebP。貼上同一段 Base64,改為下載 PNG 或 JPG 即可。