系统相关
首页 > 系统相关> > python – 为什么我的truetype字体大小为11渲染与windows不同?

python – 为什么我的truetype字体大小为11渲染与windows不同?

作者:互联网

即:打开记事本,将字体选为“Arial,Size 11”,仔细输入“这只是一个测试”字样,截图如下:

original http://i53.tinypic.com/200skuv.png

输入并运行以下Python代码:

import ImageFont, ImageDraw, Image
im = Image.open("c:/textimg.png") #the above image

pilfont = ImageFont.truetype("arial.ttf", 11)

compimg = Image.new("RGB", im.size, (255, 255, 255))
draw = ImageDraw.Draw(compimg)

draw.text((0,0), "this is just a test", (0,0,0), font=pilfont)

compimg.save("c:/compimg.png")

但结果却令人失望地不同:

sad http://i56.tinypic.com/9h7x55.png

它不仅尺寸错误,而且还略微阴影,而记事本渲染很清晰,没有像素边界.

我怎样才能让它像记事本一样呈现?我也遇到了pygame的这个问题,所以我想我在这里缺少一些关于TTF的基本理解.

更新:我再次尝试使用pygame.它做同样的事情.它确实有一个关闭消除锯齿的选项,但看起来它只是根据某个阈值消除了它的抗锯齿像素.我得到的最接近的是使用15号.代码是:

pygfont = pygame.font.Font(r"c:\windows\fonts\arial.ttf", 15)
surf = pygfont.render("this is just a test", False, (0,0,0), (255,255,255))
pygame.image.save(surf, r"c:\pygameimg.png")

和结果(记事本原件在上面进行比较):

KILL ME http://i56.tinypic.com/2r26mbs.png

Gah为什么我不能马上提供赏金?

更新:这里比较所有方法:

AIFEOIFEF http://i56.tinypic.com/51ybtg.png

PIL 15,然后记事本11,然后pygame 15反别名关闭,然后pygame 15反别名开启.

PIL 15实际上具有正确的比例,它只是消除锯齿.所以:为什么15对11?如何让它像Windows一样做到这一点? (和wtf是pygame吗?)

解决方法:

字体渲染是一个复杂而微妙的过程,已经实现了很多次.在您的情况下,PIL和Windows看起来不同,因为他们使用完全不同的字体渲染引擎. Windows使用其内置渲染,PIL使用它编译的Freetype.

我不知道每个环境如何解释它的“大小”参数,但即使你将它们解释为相同,渲染也会有所不同.获得与记事本相同像素的方法是启动记事本并抓住屏幕.

也许如果您解释为什么需要与记事本相同的渲染,我们将为您的问题提供创造性的解决方案.

标签:python,fonts,font-size,font-face,true-type-fonts
来源: https://codeday.me/bug/20190610/1211057.html