對于背景關系,我正在嘗試制作一個“sigma-male”模因生成器。這個想法是我可以輸入大量預定義的“sigma-male”笑話/引語,并將其放在“sigma-male”的影像上。這些圖片的格式應該是,在圖片的中心會有一行寫著“Sigma-Male Rule #X”,下面會有一些糟糕的生活建議,例如“不要成為問題的一部分,成為整個問題”。這是我開始的圖片(請注意,出于我的目的,所有影像的尺寸都相同,1080x1080。所以可變影像尺寸的問題應該不是問題):

順便提一句:
您可以使用getlength()andgetbbox()也可以測驗具有不同字體大小的文本以獲取適合一行的文本。
uj5u.com熱心網友回復:
我想我做的和 furas 差不多,不同的是我比較了線的長度。為此,您必須在 \n 處拆分,因為長度不是根據包裝文本計算的。
所以你拆分包裝,比較長度,選擇最長的行,增加字體大小直到它與影像大小匹配。而已。
from PIL import Image, ImageDraw, ImageFont
my_image = Image.open("image.jpg")
font = ImageFont.truetype('ANTQUAB.TTF', 10)
title_text = "Sigma Male Rule #1"
content_text = 'Don\'t be part of the problem,\nbe the whole problem'
font_size = 10
while True:
title_size = font.getlength(title_text)
content_size = font.getlength(content_text)
text_length = 0
for line in content_text.split('\n'):
if len(line) > text_length:
text_length = len(line)
content_size = font.getlength(line)
size = title_size if title_size > content_size else content_size
if size >= 1060:
break
font_size = 1
font = ImageFont.truetype('ANTQUAB.TTF', font_size)
image_editable = ImageDraw.Draw(my_image)
image_editable.text((200, 400), title_text, (255, 255, 255), font=font, stroke_width=2, stroke_fill='black',
align='center')
image_editable.text((0, 500), content_text, (255, 255, 255), align='center', font=font, stroke_width=2,
stroke_fill='black')
my_image.save("result.jpg")
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/525221.html
上一篇:使用numpy陣列對自定義python函式進行矢量化
下一篇:在腳本中實作多執行緒/并行處理
