使用 Pillow 庫在影像上繪制文本,嘗試通過 option 使錨定在影像中心的文本適合anchor='mm',但它看起來并不完全是影像的中心。
演示代碼
from PIL import Image, ImageDraw, ImageFont
im = Image.new("RGBA", (500, 500), (255, 255, 255, 255))
font = ImageFont.truetype(font='arial.ttf', size=320)
draw = ImageDraw.Draw(im)
draw.text((250, 250), "123", font=font, fill='black', anchor='mm')
im.show()
結果:

期待:

uj5u.com熱心網友回復:
文本看起來沒有對齊的原因是因為左邊有一點邊距,1枕頭會對齊包括這個邊距的文本。
0在兩端添加將顯示它正確居中并且在 處有很大的余量1。

如果要對齊不包括邊距的文本,ImageFont.getmask這很有幫助。
def get_offset_for_true_mm(text, draw, font):
anchor_bbox = draw.textbbox((0, 0), text, font=font, anchor='lt')
anchor_center = (anchor_bbox[0] anchor_bbox[2]) // 2, (anchor_bbox[1] anchor_bbox[3]) // 2
mask_bbox = font.getmask(text).getbbox()
mask_center = (mask_bbox[0] mask_bbox[2]) // 2, (mask_bbox[1] mask_bbox[3]) // 2
return anchor_center[0] - mask_center[0], anchor_center[1] - mask_center[1]
im = Image.new("RGBA", (500, 500), (255, 255, 255, 255))
font = ImageFont.truetype(font='arial.ttf', size=320)
draw = ImageDraw.Draw(im)
text = "123"
offset = get_offset_for_true_mm(text, draw, font)
draw.text((250 offset[0], 250 offset[1]), text, font=font, fill='black', anchor='mm')
im.show()
結果:

轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/430228.html
下一篇:Flutter-處理一個變數
