[英]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.