Windows 上的 Python 子像素文本渲染

问题描述

我正在尝试使用 Python 进行子像素文本渲染,其中字符串中的字符在 Windows 上可以具有不同的颜色。 到目前为止我发现了什么:

  • PIL:PIL 无法生成子像素渲染文本。它只能使用 fontmode = "0"fontmode = "1" 设置呈现别名文本。通过使用 ImageFont.getsizeImageFont.getoffset 函数确定每个字符的位置并单独绘制每个字符,它能够呈现每个字符具有不同颜色的文本。
  • pywin32 winapi 绑定:我可以直接调用 GDI 功能。这意味着我可以创建呈现子像素文本的字体。例如font_win32 = win32ui.CreateFont(font_desc) 其中 font_desc 包含键:'quality':win32con.CLEARTYPE_NATURAL_QUALITY。但是,要生成不同颜色的字符,我需要知道每个字符的大小,不包括下垂和悬垂。为此,我需要 winapi GetCharaBCWidthsFloat 函数。不幸的是,pywin32 没有绑定该函数
  • pangocairo 绑定(pycairo 或 cairocffi):我对 pangocairo 有点困惑。阅读代码和谷歌搜索表明可以使用以下方法进行亚像素渲染:fo = cairo.FontOptions(); fo.set_antialias(cairo.ANTIALIAS_SUBPIXEL)。但是,这没有任何效果

这是我迄今为止探索的 3 个方向,但没有成功。我是否遗漏了上述方法中的某些内容,或者我应该探索不同的方向。我可以用 C 编写整个内容并从 python 调用 C 代码。也许这就是前进的方向?我有点担心最后一个选项的性能

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...