Contents

[Python]圖片轉成base64碼

Base64 編碼的用途

Base64 是一種將二進位資料(如圖片)轉換為純文字格式的編碼方式,常見的應用場景包括:

  • 在 JSON API 中傳遞圖片資料
  • 在 HTML/CSS 中以 Data URI 嵌入小圖片,減少 HTTP 請求
  • 在電子郵件中傳遞附件
  • 將圖片存入資料庫的文字欄位

方法一:從本地檔案讀取並轉換

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
import base64

# 開啟圖片檔案(以二進位模式 "rb" 讀取)
with open("a.jpg", "rb") as fp:
    img_data = fp.read()

# 編碼為 base64(回傳 bytes 物件)
img_b64 = base64.b64encode(img_data)

# 轉為字串(方便後續使用)
img_b64_str = img_b64.decode("utf-8")
print(img_b64_str)

方法二:從網路下載圖片後轉換

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
import base64
import requests

imgurl = "https://example.com/image.jpg"

# 下載圖片(content 為 bytes 物件)
response = requests.get(imgurl)
imgdata = response.content

# 編碼為 base64
imgb64 = base64.b64encode(imgdata)
imgb64_str = imgb64.decode("utf-8")
print(imgb64_str)

解碼方法

1
2
3
4
5
6
7
8
9
import base64

# 將 base64 字串還原為原始二進位資料
img_b64_str = "..."  # 你的 base64 字串
img_data = base64.b64decode(img_b64_str)

# 儲存為圖片檔案
with open("output.jpg", "wb") as f:
    f.write(img_data)

在網頁中使用 Data URI

Base64 編碼後,可直接嵌入 HTML 或 CSS,格式為:

1
data:<MIME type>;base64,<base64 string>

HTML 範例:

1
2
<!-- 直接在 img 標籤中嵌入圖片 -->
<img src="data:image/jpeg;base64,/9j/4AAQSkZJRgAB..." alt="內嵌圖片">

CSS 範例:

1
2
3
.icon {
  background-image: url("data:image/png;base64,iVBORw0KGgoAAAANS...");
}

Python 產生 Data URI:

1
2
3
4
5
6
7
import base64

with open("logo.png", "rb") as f:
    b64 = base64.b64encode(f.read()).decode("utf-8")

data_uri = f"data:image/png;base64,{b64}"
print(data_uri)

注意事項

  • Base64 編碼後的資料大小約為原始大小的 4/3 倍(約 33% 增加)
  • 建議只對小圖片(< 10KB)使用 Data URI,大圖片應使用一般的圖片 URL 以利瀏覽器快取。
  • base64.b64encode() 回傳的是 bytes 物件,需用 .decode("utf-8") 轉為字串。