PIL ImageDraw.Text 或 ImageDraw.multiline_text 对齐

PIL ImageDraw.Text or ImageDraw.multiline_text Alignment

我想将价格绘制到图片中,美元的 fontsize=2x,美分的 fontsize=x,如下所示:


我希望能够写出 1.90 和 19.90 等等,这就是为什么我希望美元金额右对齐,而美分金额标准左对齐。

编辑:我忘记了一个要点:逗号是固定的(因为显示位置),我想写美元值,以便它向左扩展,而美分值始终保持原样(00 , 05, 10, 19, 99....)。因此,当我写 123,99 而不是 12,99 时,我仍然希望 , 处于相同的位置。到目前为止,我唯一的想法是使用单个字符,处理起来不太舒服:(

使用 ImageDraw 模块,您可以获得文本字符串的大小。

draw.textsize(string, options) ⇒ (width, height)

这是来自 http://effbot.org/imagingbook/imagedraw.htm 的文档。因此,您可以获得字符串“12”的宽度(以像素为单位)。现在您只需从所需的结束位置减去宽度即可知道从哪里开始。不幸的是,PIL 似乎没有给出定位文本的方法,除非指定左上角,因此对于其他锚点,您必须自己计算(据我所知)。

编辑: 我刚刚在 http://pillow.readthedocs.org/reference/ImageDraw.html#functions

查看了 Pillow 文档

给定函数的签名是

PIL.ImageDraw.Draw.text(xy, text, fill=None, font=None, anchor=None)

不过,在签名下方的评论中,"anchor"并没有说明,所以这可能只是一个计划中的未来增强。我自己对 Pillow 文档的体验表明这是一种真实的可能性。就个人而言,我会尝试查看 Pillow 源并确定状态,然后再从 PIL 转换为 Pillow 只是为了这个。

对于苦苦挣扎于 PIL 和锚点的每个人 - 文档已更新。现在枕头支持锚点放置。

这是文档:https://pillow.readthedocs.io/en/stable/handbook/text-anchors.html

在您的具体示例中,您可以放置​​一个文本元素相对于基线,另一个文本元素相对于上升层。