【问题标题】:Can't center characters using Pillow and Python无法使用 Pillow 和 Python 居中字符
【发布时间】:2019-11-28 18:35:20
【问题描述】:

我正在尝试在图像的特定位置写入字符。我正在使用 Pillow v6,Python 3.6。

这是我的代码,我逐个字符地绘制,通过我计算的左上角。

   font = ImageFont.truetype('platechar.tff', 500)

   def draw_single_char(img, font, val, tl): #tl = (x,y)
        pil_img = Image.fromarray(np.uint8(img))
        draw = ImageDraw.Draw(pil_img)
        draw.text(tl, val, (0,0,0), font=font)
        img = np.array(pil_img)
        return img

输出没有居中,我从字体中得到了字符的宽度和高度,然后用左上角绘制了包围字符的矩形。字符不在矩形内居中。

字体:https://drive.google.com/open?id=1N9rN-AgjK83U9ZDycLKxjeMP3o36vbfg

我希望它是这样的(另一种字体)


编辑 使用Bidu Font editor 我能够删除水平空间(蓝线)。我怎样才能垂直居中?

目前的结果...

【问题讨论】:

    标签: python python-imaging-library center


    【解决方案1】:

    看起来您使用的字体最初包含非居中数字。所以你应该选择另一种字体,或者你可以在一个特殊的字体编辑器中修改你的placechar.tff

    您还可以手动计算每个符号的坐标偏移量,将它们存储到字典中并在绘制之前将其应用于您的文本。这看起来不是一个好主意,但它也可以。

    【讨论】:

    • 如何计算偏移量?你能推荐一个编辑器来编辑这个字体吗?谢谢。
    • 我的意思是手动计算:您像以前一样打印矩形内的所有符号,并为每个符号尝试不同的偏移量以使其居中。
    【解决方案2】:

    计算要绘制的文本的宽度和高度:

    from PIL import Image, ImageDraw, ImageFont
    
    txt='7'
    
    font = ImageFont.truetype('platechar.ttf', 250)
    (W, H) = font.getsize(txt)
    image = Image.new('RGB', (256, 256), (63, 63, 63, 0))
    drawer = ImageDraw.Draw(image)
    
    (offset_w, offset_h) = font.getoffset(txt)
    (x, y, W_mask, H_mask) = font.getmask(txt).getbbox()
    drawer.text((10, 10 - offset_h), txt, align='center', font=font)
    drawer.rectangle((10, 10, W + offset_w, 10 + H - offset_h), outline='black')
    drawer.rectangle((x+10, y+10, W_mask+10, H_mask+10), outline='red')
    image.show()
    image.save('example.png', 'PNG')
    

    【讨论】:

    • 你能解释一下解决方案吗?
    【解决方案3】:

    采用@Fomalhaut 建议的路径后,使用字体编辑器。我找到了 Bidu 字体编辑器(问题中的链接)。我能够修复水平空间(也显示在问题中)。对于垂直空间,在搜索菜单后,我找到了更改ascent 的设置选项。

    我将它降低到 1440,它起作用了。

    【讨论】:

      猜你喜欢
      • 2020-03-28
      • 1970-01-01
      • 1970-01-01
      • 2014-07-21
      • 2014-10-29
      • 2017-09-29
      • 1970-01-01
      • 1970-01-01
      • 2021-06-15
      相关资源
      最近更新 更多