python – 为什么我的truetype字体大小为11渲染与windows不同?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 为什么我的truetype字体大小为11渲染与windows不同?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1775字,纯文字阅读大概需要3分钟。
内容图文
![python – 为什么我的truetype字体大小为11渲染与windows不同?](/upload/InfoBanner/zyjiaocheng/968/8d995111d9394e66881a12822c066312.jpg)
即:打开记事本,将字体选为“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 – 为什么我的truetype字体大小为11渲染与windows不同?全部内容,希望文章能够帮你解决python – 为什么我的truetype字体大小为11渲染与windows不同?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。