gpt4 book ai didi

python - 枕头 - 绘制文字标签字形?

转载 作者:行者123 更新时间:2023-12-05 04:27:09 24 4
gpt4 key购买 nike

Unifont 包含标记、变体选择器和其他不可打印字符的字形。

例如在 https://unifoundry.com/pub/unifont/unifont-14.0.04/font-builds/unifont_upper-14.0.04.ttf 的末尾这些标签是什么(如 FontForge 中所示):

Screenshot showing lots of characters in FontForge.

每个都有一个应该可打印的字形:

Outline drawing of a character.

我想使用 Unifont 在带有 Pillow 的图像上绘制该字形。

from PIL import Image, ImageDraw, ImageFont

text = chr(0x2A6B2) + " " + chr(0x0E0026)

font = ImageFont.truetype("unifont_upper-14.0.04.ttf", size=64)

image1 = Image.new("RGB", (256, 64), "white")
draw1 = ImageDraw.Draw(image1)
draw1.text( (0 , 0), text, font=font, fill="black")
image1.save("test aa.png")

第一个字符(CJK 表意文字)绘制正确。但是标签字符是不可见的。

有没有办法让 Pillow 绘制出我在 FontForge 中看到的形状?

最佳答案

不幸的是,简短的回答似乎是“不,你不能”。

Pillow 通常使用 libraqm 来布置文本(即将 Unicode 字符串映射到字体中的字形,特别是 raqm_layout 函数。

该库反过来使用名为 harfbuzz 的库来进行文本整形。

你想要的标签字符,包括U+E0026,有Unicode default ignorable属性(property)。默认情况下,harfbuzz 不显示具有此属性的字符,而是用空白字形替换它们。但是可以使用标志来修改此行为:具体来说,调用 hb_buffer_set_flagsHB_BUFFER_FLAG_PRESERVE_DEFAULT_IGNORABLES看起来它会实现你想要的,显示这些字符而不是将它们消隐。

问题是,libraqmcalls harfbuzz 时无法设置此标志。 - 它确实让你设置一些其他的标志,但不是这个 :(

为了实现你想要的,我想你必须使用一个较低级别的库——显然有 FreeType 和 harfbuzz 的 Python 绑定(bind),虽然我没有使用过,所以我可以'不要评论可能涉及多少痛苦。

关于python - 枕头 - 绘制文字标签字形?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72893662/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com