防止 TrueType 字体的抗锯齿(或子像素渲染)

Prevent anti-aliasing (or sub-pixel rendering) of a TrueType font

这是 .ttf 字体的呈现方式:

我使用 FontForge 创建了这个纯矢量 TrueType 字体。 我想在需要基于矢量字形且不支持加载 .ttf 嵌入位图的应用程序上使用此字体 (似乎没有此问题)

在某些配色方案中,Windows 所做的这种子像素渲染使字体完全不可读。这种效果存在于大多数 ttf 字体中,但在像我这样具有像素完美边缘的字体上更为强烈。

有谁知道任何可编程的提示技巧或字体设置,可以让字体以像素完美呈现,而不是带有这个 red/blue 光环?我希望字体在没有 OS 禁用 ClearType 或类似的修改的情况下正常工作。

澄清一下,这是一个关于利用 TrueType 指令集或更改 TrueType 字体设置的问题(不是 System/Application 设置) 我可能忽略了正确设置,以使字体呈现清晰(如果可能)。

On certain color-schemes this sub-pixel rendering that Windows does makes the font completely unreadable.

听起来好像 ClearType 没有正确校准。

只有当文本颜色与显示器的颜色平面匹配时,“像素完美”显示才有可能。对于黑色或灰度文本,这意味着灰度显示(例如,高分辨率和昂贵的数字单色显示器在医学成像领域很流行)。

否则,您 运行 会陷入 颜色分量在显示器上物理分离的基本事实 。 ClearType 的概念是调整图像以补偿颜色平面之间的实际物理偏移。

具有高精度套准的印刷介质是最接近多色平面且没有任何偏移的。

现在,在某些情况下禁用 ClearType 仍然有意义 -- 当图像打算保存在文件中而不是在本地显示器上显示时,禁用 ClearType 可以产生在更广泛的范围内清晰可见的结果显示范围,并且压缩得更好。 (但为了获得最佳效果,请发送矢量并让最终用户显示器补偿其特定的子像素结构)

在 GDI 中,ClearType 的控制是通过 LOGFONT 结构设置的,该结构命令文本绘制函数使用哪些字体系列、大小和属性。在 GDI+ 中,在 Graphics 实例上使用 SetTextRenderingHint

因为 ClearType 的使用是由应用程序同时设置大小、粗细和其他属性的,所以您的字体在有和没有的情况下都会受到请求。但是,ClearType 并非与所有字体兼容,通过强制不兼容,您将避免单独为您的字体使用 ClearType。

The LOGFONT documentation 对 ClearType 的评价如下:

The following situations do not support ClearType antialiasing:

  • Text is rendered on a printer.
  • Display set for 256 colors or less.
  • Text is rendered to a terminal server client.
  • The font is not a TrueType font or an OpenType font with TrueType outlines. For example, the following do not support ClearType antialiasing: Type 1 fonts, Postscript OpenType fonts without TrueType outlines, bitmap fonts, vector fonts, and device fonts.
  • The font has tuned embedded bitmaps, for any font sizes that contain the embedded bitmaps. For example, this occurs commonly in East Asian fonts.

此外,TTF 格式中的 gasp table 指定了几个字段来影响 ClearType 的使用。

文档位于 https://www.microsoft.com/typography/otspec/gasp.htmhttps://fontforge.github.io/fontinfo.html#gasp

当然,请确保未设置 head table 中的“针对 ClearType 优化”位。

工作解决方案

感谢 Brian Nixon 发布解决方案 URL,感谢 Erik Olofsson 研究和发布解决方案在他的博客上。

Erik Olofsson 提供了一种解决方案,强制 Windows 字体 API 在渲染时优先使用 .ttf 嵌入位图,优先于字形。

可以在http://www.electronicdissonance.com/2010/01/raster-fonts-in-visual-studio-2010.html

中找到详细的解决方案

解决方案总结

  1. Add 'Traditional Chinese' code page to the OS/2 Panpose table.
  2. Use the 'ISO 106046-1' (Unicode, UCS-2) encoding.
  3. Include glyphs for the following seemingly random Hiragana characters:
    • い - U+3044
    • う - U+3046
    • か - U+304B
    • ひ - U+3057
    • の - U+306E
    • ん - U+3093

这个名单不是闹着玩的