Python PIL 绘制文本偏移
我尝试用Python的PIL库在一张图片上画一个字符。使用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)
这是为什么呢?
3 个回答
0
这段代码:
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()
生成了这个:
这是不是你预期的结果呢?
1
看起来不同字体有不同的偏移量;你可以通过 FreeTypeFont.getbbox() 返回的 "top" 值来获取垂直偏移量。在调用 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()
2
draw.text()
这个函数里的 xy
参数表示文本的左上角位置(文档)。不过,字体周围可能会有一些空白,特别是上下的空白。为了处理这个问题,我把这个位置的 y
值设置成了一个负数(大概是 -5 左右吧),这样就解决了我的问题。