繁体   English   中英

python pil 绘制文本偏移量

[英]python pil draw text offset

我试图用 Python PIL 在图像上画一个字符。 对于 function ImageDraw.Draw.text(),xy 参数指向文本的左上角。 但是我将 xy 设置为 (0,0),字符还没有绘制到图像的左上角。

from PIL import ImageFont, ImageDraw, Image 

imageSize=(40,40)
mage = Image.new("RGB", imageSize, (0,0,0))
draw = ImageDraw.Draw(image)
txt = "J"
font = ImageFont.truetype("ANTQUAB.ttf",35)
draw.text((0,0), txt, font=font) 

为什么?

draw.text()xy参数是文本的左上角( http://pillow.readthedocs.io/en/3.1.x/reference/ImageDraw.html ),但是字体周围可能会有一些填充文字,尤其是垂直文字。 我所做的是将元组的y部分设置为负数(也许在-5左右?),它对我有用。

这段代码:

from PIL import ImageFont, ImageDraw, Image 

imageSize=(100,100)
image = Image.new("RGB", imageSize, (0,0,0))
draw = ImageDraw.Draw(image)
txt = "J"
font = ImageFont.truetype("ARIAL.ttf",35)
draw.text((0,0), txt, font=font) 
image.show()

生成此:

在此处输入图片说明

这不是您所期望的吗?

看起来有特定于字体的偏移量; 您可以获得从 FreeTypeFont.getbbox() 返回的“顶部”值的垂直偏移量。 从调用 draw.text 的 y 坐标中减去此偏移量将使文本顶部与图像顶部对齐。

from PIL import ImageFont, ImageDraw, Image

text = 'J'
font = "arial.ttf"
fontsize = 12

img_w = 100
img_h = 100
canvas = Image.new('RGBA', size=(img_w,img_h), color='white')
draw = ImageDraw.Draw(canvas)
y_text = 0

font_obj = ImageFont.truetype(font, fontsize)
(left, top, right, bottom) = font_obj.getbbox(text)

x_pos = 0
y_pos = 0

# offset the y coordinate in the draw call by the "top" parameter fromgetbbox; this is the font-specific text padding
draw.text(xy=(x_pos, y_pos-top), 
            text=text, 
            font=font_obj,
            align='left', 
            fill='black')

canvas.show()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM