Skip to content

[Python] 使用 Pillow 套件將字型檔轉成 PNG 圖片

Last Updated on 2021-06-08 by Clay

今天突然間有了將『字型檔』以 PNG 格式的圖檔儲存的需求……雖然我不太明白為什麼會有這樣的需求,哈哈哈哈。不過既然都遇到這個問題,也確實在一番努力下找到答案了,那我就來簡單紀錄一下吧。

一開始,思路上是想要以 “fontTools” 這個 Python 的套件來解決問題的,不過在經過一番嘗試以後,發現 Pillow 當中本來就有著的 “ImageFont” 函式更是好用,於是最後就直接使用 Pillow 來實作的。

不過在實作的過程中,發現 “fontTools” 可以迭代輸出字體檔的文字,這功能還是挺方便的。


ImageFont 模組

以下我讀取 Ubuntu 當中自帶的 “Ubuntu.ttf” 字體檔,並嘗試印出字母 “A”,並將其對應在圖片的正中央。

那麼,直接來看程式碼:

# -*- coding: utf-8 -*-
from PIL import Image, ImageDraw, ImageFont


# Settings
W, H = (224, 224)

# Font
font = ImageFont.truetype("/home/clay/.fonts/Ubuntu.ttf", 224, encoding='utf-8')

# Image
image = Image.new("RGB", (W, H), "black")
draw = ImageDraw.Draw(image)
offset_w, offset_h = font.getoffset("A")
w, h = draw.textsize("A", font=font)
pos = ((W-w-offset_w)/2, (H-h-offset_h)/2)

# Draw
draw.text(pos, "A", "white", font=font)

# Save png file
image.save("test.png")



Output:

基本上也沒什麼好解說的,簡單來講就是使用 ImageFont 讀入字型檔 => 決定繪製的文字 => 建立圖片 => 計算偏移 => 繪製。並沒有什麼太大的功夫。

最後,既然是 Pillow 的 Image 物件,那麼直接 Save 成 PNG 檔便大功告成。

希望每個有使用字型檔繪製圖片需求的人 (這到底是什麼需求啊?) 都能夠成功完成這項任務。


Reference


Read More

Leave a Reply