【发布时间】:2019-07-10 17:07:22
【问题描述】:
所以,正如主题所说,我想在透明图像上写一些文字。 或者,更具体地说,我想在多个特定位置上写不同的文字。关键是,我想使用自定义字体(coolvetica)并且(还有我的问题)我希望它是抗锯齿的。不幸的是,PIL 不支持字体抗锯齿,正如您可能已经知道的那样,但也请参见此处: PIL example image. 如您所见,PIL 不仅坐标有问题,而且不真正支持字体抗锯齿,并在文本中添加了一些恼人的黑色边框。它对我来说不是很有用。 所以经过一番搜索,我找到了Python Wand。输出要好得多,但抗锯齿不会导致我想要的结果:Wand example image. 曲线不像我想要的那样平滑,并且有一些奇怪的“疙瘩”,比如“r”末尾的点。 我使用魔杖的代码是这样的:
with Drawing() as draw:
with wandimage(filename="Skispringen_Score.png") as img:
draw.font_family = 'coolvetica.ttf'
draw.text_antialias = True
draw.fill_color = (Color("rgba(255, 255, 255, 255)"))
for postionName, scorePosition in scoreContent.items():
if isinstance(currentScoreText[postionName], int) and currentScoreText[postionName] > 9:
center = 2
else:
center = 0
draw.font_size = fontsize[scorePosition["size"]]
draw.text(scorePosition["x"] - center, scorePosition["y"], str(currentScoreText[postionName]))
draw(img)
img.save(filename='wand-image.png')
下面是文本实际应该是什么样子的示例:PHP example image. 这张图片是用 php 生成的,文本看起来和我想要的一样平滑。 我也尝试过使用 cairo,但是文档真的不是很好(尤其是例子很少),我什至不知道如何用它写任何文本,也不知道如何设置自定义字体。
实际输出图像的分辨率为 1280x720,除了文本之外,它是完全透明的,图像只是视频流的叠加。
你知道如何使用 python 在图像上获得漂亮的文本吗?
【问题讨论】:
标签: python python-3.x python-imaging-library wand pycairo