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,它在一张分辨率相似的图片上占据了巨大的空间。这修复了它,谢谢。