ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

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

2019-06-10 09:45:57  阅读:318  来源: 互联网

标签:python fonts font-size font-face true-type-fonts


即:打开记事本,将字体选为“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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有