Python PIL字体大小不变

Python PIL字体大小不变,python,python-imaging-library,Python,Python Imaging Library,我正在设置一个程序,在图像上写一些数字。字体大小将根据其书写位置而改变(此大小将被硬编码) 阅读完文档后,我使用ImageFont.truetype('font.ttf',fontSize)加载我的字体,使用fontSize=400 从PIL导入图像、ImageDraw、ImageFont image=image.open('base.jpg') draw=ImageDraw.draw(图像); 字体大小=400 font=ImageFont.truetype('font.ttf',fontSi

我正在设置一个程序,在图像上写一些数字。字体大小将根据其书写位置而改变(此大小将被硬编码)

阅读完文档后,我使用
ImageFont.truetype('font.ttf',fontSize)
加载我的字体,使用
fontSize=400

从PIL导入图像、ImageDraw、ImageFont
image=image.open('base.jpg')
draw=ImageDraw.draw(图像);
字体大小=400
font=ImageFont.truetype('font.ttf',fontSize)
颜色='rgb(0,0,0)'
def drawInfo():
draw.text((50200),'20',fill=颜色,font=字体)
image.save('newVersion.jpg')
drawInfo()
字体:

base.jpg

newVersion.jpg


预期的结果是,在strength下左上角的小
20
将是巨大的(字体大小为400)。不幸的是,它似乎只是默认大小。我做错了什么?

400很可能是一个太大的数字,在将其减少到75之后,它工作得很好。

简单的回答是400是一个太大的数字,但是如果您想知道为什么它会导致您的字体成为默认大小,我将带您经历一段简短的旅程

首先,在代码中使用
font=ImageFont.truetype('font.ttf',400)
。这将在库中部署
truetype
函数,该函数调用
FreeTypeFont

    def freetype(font):
        return FreeTypeFont(font, size, index, encoding, layout_engine)

    try:
        return freetype(font)
    except IOError:
有趣的部分是在
FreeTypeFont
中发生的事情,如下所示:

FreeTypeFont调用core.getfont,它实际使用库,并且 这就是字体大小为400导致_imagingftgetfont函数失效的原因,该函数放弃加载文本并抛出错误:

最后,如果您还记得第一个函数,
truetype
,它实际上有一个
try:except IOError:
,这会导致它调用
FreeTypeFont
函数而没有字体大小,使其默认为10,并导致当前问题:


从本质上说,解决方案是尝试最大字体大小,而不会破坏_imagingft库,或者使用不同的库来加载字体。

400对于PIL来说是一个非常大的字体大小。刚刚检查了我过去的一些代码,我用的是75,它在一张分辨率相似的图片上占据了巨大的空间。这修复了它,谢谢。