> JPG | 編碼 | 資料URI <

// 將JPG / JPEG照片編碼為Base64字串和資料URI — 保留EXIF、DCT係數和品質

🖼️

將JPG / JPEG拖放到此處或點擊選擇

點擊瀏覽JPG / JPEG檔案

// 支援:JPG、JPEG(.jpg, .jpeg, image/jpeg)
0 字元
[忠實]

位元完全一致

您的JPEG永遠不會被重新壓縮。DCT係數、量化表和EXIF元資料都能完整地往返。

[私密]

本地處理

照片在瀏覽器中使用FileReader + btoa()編碼。無上傳、無伺服器、無分析您的圖像位元組。

[就緒]

可直接貼上

複製符合標準的data:image/jpeg;base64,… URI直接用於HTML、CSS、電子郵件或JSON API負載。

// 常見問題 — JPG轉BASE64

問:什麼是JPG轉Base64編碼?

答:它使用Base64字母表(RFC 4648)將.jpg / .jpeg檔案的二進位位元組改寫為ASCII安全的字串。所得文字可嵌入HTML、CSS、電子郵件、JSON主體或任何其他純文字通道,而無需單獨檔案。關鍵是,底層的JPEG不會被重新編碼 — 每個DCT係數、量化表、Huffman表和EXIF/IPTC/XMP元資料標記都會被保留。

問:如何將JPG編碼為Base64?

答:將.jpg.jpeg檔案拖入上傳區(或點擊瀏覽)。該工具使用FileReader.readAsDataURL()開啟它,產生可直接貼上的data:image/jpeg;base64,/9j/4AAQSkZ… URI。選擇資料URI以直接嵌入<img>,或如果您的API需要不帶data:image/jpeg;base64,前綴的原始負載,則選擇僅Base64負載

問:將JPG編碼為Base64會降低圖像品質嗎?

答:不會。Base64是可逆的二進位到文字轉換 — 不是重新編碼。JPEG的原始壓縮(無論儲存時使用的品質級別、子取樣模式和Huffman表為何)都會逐位元組保留。如果您將Base64解碼回檔案,其SHA-256雜湊值將與原始檔案相符。唯一可能影響JPEG的品質損失發生在它最初從編輯器儲存時;Base64不會再增加任何損失。

問:為什麼每個JPG Base64字串都以<code>/9j/</code>開頭?

答:每個JPEG的前兩個位元組是Start-Of-Image標記FF D8,後面跟著應用程式標記如FF E0(JFIF)或FF E1(EXIF)。當您對前3個位元組FF D8 FF進行Base64編碼時,總是得到/9j/。因此任何以/9j/4AAQ(JFIF)或/9j/2wC(許多智慧型手機相機)開頭的字串都可靠地是JPEG — 除錯時非常有用的健全性檢查。

問:JPG經Base64編碼後會變大多少?

答:Base64增加約33%的開銷:size_base64 = 4 × ⌈size_bytes / 3⌉。一張250 KB的照片會變成約340 KB的文字。由於JPEG已經被壓縮,gzip/Brotli對Base64字串僅能回收約10%。對於內嵌圖像,請將原始檔案保持在約5 KB以下(約6.8 KB編碼後),否則會使您的HTML/CSS膨脹並損害首次繪製效能。

問:如何在HTML中以Base64嵌入JPG?

答:將完整的資料URI貼到src屬性中:
<img src="data:image/jpeg;base64,/9j/4AAQSkZ…" alt="cover">
不會發起HTTP請求 — 瀏覽器會解碼Base64並立即顯示照片。這就是為什麼內嵌JPEG縮圖在首屏主要區塊、電子郵件簽名和單一檔案HTML報告中非常流行。

問:如何在JavaScript、Node、Python、PHP、Go中將JPG編碼為Base64?

答:
JavaScript(瀏覽器):new FileReader() + .readAsDataURL(jpgFile)result就是資料URI
Node.js:fs.readFileSync('photo.jpg').toString('base64')
Python:base64.b64encode(open('photo.jpg','rb').read()).decode()
PHP:base64_encode(file_get_contents('photo.jpg'))
Go:base64.StdEncoding.EncodeToString(jpgBytes)
Ruby:Base64.strict_encode64(File.read('photo.jpg'))
Bash:base64 -w0 photo.jpg(GNU)或base64 -i photo.jpg -o out.txt(macOS)

問:當我將JPG進行Base64編碼時,我的EXIF資料會被保留嗎?

答:是的,預設會保留。EXIF區段(相機型號、日期/時間、GPS座標、鏡頭、曝光、白平衡、方向)以APP1標記存在JPEG中。由於Base64是位元對位元的轉換,這些標記能完整保留 — 當圖像被解碼回來時,EXIF與原本完全相同。如果隱私很重要(GPS座標、序號),請在編碼之前使用exiftool -all=之類的工具或瀏覽器canvas重新匯出來移除EXIF,因為Base64本身不會為您移除它。

問:什麼時候應該使用JPG → Base64而不是將JPG作為單獨檔案?

答:當滿足以下條件時使用Base64 JPEG資料URI:
• 圖像很小(< 5 KB)且對首次繪製至關重要
• 您要在JSON API主體、GraphQL變更或WebSocket框架中傳送照片
• 您正在建構無法依賴外部CDN URL的自含HTML電子郵件、報告或PDF匯出
• 您將照片序列化到資料庫TEXT欄位(當您無法使用BLOB時)
當圖像較大、在多個頁面中重複使用或需要自己的長期快取標頭時,優先使用普通的.jpg URL。

問:JPG vs JPEG — 它們是不同的格式嗎?

答:不是。.jpg.jpeg只是同一格式(Joint Photographic Experts Group)的不同檔案副檔名。早期Windows 8.3檔名限制迫使使用3個字母的副檔名,這就是.jpg流行起來的原因。現代系統接受兩者。MIME類型始終為image/jpeg,Base64資料URI前綴始終為data:image/jpeg;base64, — 我們的工具對這兩個副檔名的處理完全相同。

問:Base64編碼是一種圖像壓縮形式嗎?

答:不是 — 恰恰相反。JPEG本身已經透過DCT + Huffman編碼進行了壓縮(相對於原始像素資料實現10–20倍的縮減)。Base64然後使檔案再變大約33%以換取ASCII安全性。您仍然應該使用Base64,因為某些通道(HTML屬性、JSON字串、電子郵件、URL)無法攜帶原始二進位資料。但不要期望從中獲得任何大小節省;事實上,總是考慮在Base64文字之上使用gzip/Brotli。

問:我可以將JPEG編碼為URL安全的Base64負載以用於URL中嗎?

答:可以 — 切換到我們的Base64url編碼器(RFC 4648 §5),它使用-_字母表代替+/並省略尾部的=填充,產生可安全放入查詢字串或JWT的負載。標準的Base64 JPEG原始負載通常有數百KB長,會超過許多URL長度限制(依瀏覽器/伺服器而定為2–8 KB),因此連結到檔案幾乎總是比對整張照片進行URL編碼更好的主意。

問:在我的瀏覽器記憶體不足之前,我可以編碼多大的JPG?

答:編碼使用FileReader以串流方式進行,然後在結果上呼叫btoa()。現代桌面瀏覽器可以毫無問題地處理100–200 MB的輸入;行動瀏覽器可靠地處理最多約40 MB,然後才會遇到記憶體壓力。對於真正巨大的圖像(來自中片幅相機的RAW轉JPEG匯出),請考慮伺服器端編碼器或分段處理 — 如果您的照片大於100 MB,我們的工具會警告您。

問:JPG → Base64 vs PNG → Base64 — 我應該用哪個?

答:對於照片、相簿、社群媒體圖像以及任何具有平滑漸變且可接受80–90%品質JPEG壓縮的內容,使用JPG → Base64。一張典型的1080p照片作為JPEG約200 KB,而作為PNG約2 MB。對於圖示、標誌、螢幕截圖、圖表以及任何具有透明度或清晰邊緣的內容,使用PNG → Base64。混合使用:為主照片使用Base64 JPG加上為銳利疊加圖示使用Base64 PNG是常見模式。

// 其他語言