使用方法
- 將 .jpg 或 .jpeg 檔案拖到上傳區域,點選選擇檔案,或貼上圖片。
- 想完全保留原檔案,就不要開啟轉換;想縮小體積,可以選擇 JPEG 或 WebP 並調低品質。
- 如果照片比實際顯示尺寸大,可以設定最大寬度。
- 複製所需的輸出,例如網頁用的 img 標籤或 API 用的純 Base64,也可以下載為檔案。
JPEG 簡介
JPEG 是照片的標準格式,採用有失真壓縮,丟棄人眼幾乎察覺不到的細節,不支援透明。副檔名可能是 .jpg、.jpeg,偶爾是 .jfif,但 MIME 型別始終是 image/jpeg。image/jpg 並不是註冊的型別,只是很多瀏覽器能夠容忍。JPEG 的 Data URI 以 data:image/jpeg;base64,/9j/ 開頭,這正是「影像起始」標記編碼後的樣子。
編碼前先給照片瘦身
照片是 Base64 代價最大的場景:200 KB 的 JPEG 會變成大約 270 KB 的文字。下面兩個設定影響最大:
- 最大寬度。寬度減半,像素數量就只剩四分之一。手機拍的照片寬達 4000 像素,很少需要這麼大。
- 品質。70% 到 80% 左右在螢幕上通常與原圖看不出區別,體積卻小很多;品質過低則會出現明顯的色塊。
以相近品質轉換為 WebP,體積往往還能更小。留意每種設定下的編碼後大小,選擇看起來仍然滿意的最小結果。
EXIF 後設資料
相機和手機拍攝的照片帶有 EXIF 後設資料,包括相機型號、拍攝時間,有時還有 GPS 座標。不開啟轉換時,Base64 輸出包含原始位元組和全部後設資料,任何人解碼後都能讀到。如果需要完全一致的檔案,例如 API 要校驗雜湊值或讀取拍攝日期,這正是你想要的。
開啟轉換後,瀏覽器會重新編碼像素,EXIF 資料不會被保留。輸出體積更小,也不會再暴露照片的拍攝地點。
什麼時候值得使用 JPEG Data URI
適合的場景包括:寬度只有 20 到 40 像素的模糊佔位圖(先內嵌顯示,原圖再延遲載入)、JSON 介面中的縮圖,以及單檔案 HTML 匯出。首頁大圖和相簿應當作為單獨檔案,方便瀏覽器快取。
# Python
import base64
with open('photo.jpg', 'rb') as f:
uri = 'data:image/jpeg;base64,' + base64.b64encode(f.read()).decode('ascii')
常見問題
JPG 和 JPEG 是一回事嗎?
是的。較短的 .jpg 副檔名源於早期只允許 3 個字元副檔名的系統。兩者是同一種格式,MIME 型別都是 image/jpeg。
Base64 編碼會降低 JPEG 畫質嗎?
不會。Base64 只是檔案位元組的無損表示。只有選擇轉換時,圖片才會按你設定的品質重新編碼,畫質才會變化。
Base64 字串裡會包含照片的拍攝位置嗎?
有可能。如果原始 JPEG 的 EXIF 中有 GPS 資訊,而你直接編碼原檔案,位置資訊就在字串裡。轉換圖片會去除 EXIF 後設資料。