pillow로 text 진흙탕 letter-spacing
한 글자 한 글자.이런 방법도 있지만 베이스라인이 잘 안 풀릴 것 같은 예감이 들어 드로잉->컷->패딩을 계산해 재구성하는 수단을 썼다.
def letter_spacing(font, text, letter_spacing):
font_size = font.getsize(text)
text_img = Image.new("L", font_size, color=255)
draw = ImageDraw.Draw(text_img)
draw.text((0, 0), text, font=font)
# paddingを含めたサイズの計算・新しい画像の生成
padded_width = font_size[0] + letter_spacing * (len(text) -1)
padded_text_img = Image.new("L", (padded_width, font_size[1]), color=255)
# 文字を切り出しつつ結合
char_imgs = []
cursor = 0
for i, char in enumerate(list(text)):
char_w = font.getsize(char)[0]
end = cursor + char_w
ws = (cursor + 1, end)
char_img = text_img.crop((ws[0], 0, ws[1], text_img.height))
new_paste_w = ws[0] + i * letter_spacing
padded_text_img.paste(char_img, (new_paste_w, 0))
cursor = end # increment
return padded_text_img
if __name__ == "__main__":
img = Image.new("L", (600, 200), color=255)
font = ImageFont.truetype("./Roboto-Bold.ttf", 40)
text = "1,234 good morning"
# paddingしてない版の描画
font_size = font.getsize(text)
text_img = Image.new("L", font_size, color=255)
draw = ImageDraw.Draw(text_img)
draw.text((0, 0), text, font=font)
img.paste(text_img)
# padding版の描画
letter_spacing_img = letter_spacing(font, text, 10)
img.paste(letter_spacing_img, (0, font_size[1]))
img.save("./output.png")
결실
Reference
이 문제에 관하여(pillow로 text 진흙탕 letter-spacing), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/terrierscript/articles/2021-01-17-pillow-text-letter-spacing텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)