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
- https://github.com/python-pillow/Pillow/issues/2067
- https://pillow.readthedocs.io/en/stable/reference/ImageFont.html
- https://stackoverflow.com/questions/24085996/how-i-can-load-a-font-file-with-pil-imagefont-truetype-without-specifying-the-ab