在 IE9 中禁用 Cleartype(文本抗锯齿)

Posted

技术标签:

【中文标题】在 IE9 中禁用 Cleartype(文本抗锯齿)【英文标题】:Disable Cleartype (text anti-aliasing) in IE9 【发布时间】:2011-07-22 14:08:34 【问题描述】:

有据可查(例如here)IE9 忽略了操作系统范围的字体平滑设置(也称为抗锯齿)。即使在 Windows 中禁用了字体平滑和 ClearType,IE 仍然显示抗锯齿字体,一些用户难以阅读,尤其是在小字体时。

如何在 IE9 中禁用所有字体抗锯齿(ClearType 或其他)?

更多详情:

我们公司构建了一个使用大量小字体的 Web 应用程序。随着 IE9 的发布,我们的一些用户抱怨 IE9 的默认抗锯齿使我们的小字体变得模糊或模糊。所以我们需要帮助那些已经安装了 IE9 并且想要关闭抗锯齿功能的用户。

另外,就我个人而言,我在阅读小的抗锯齿字体时遇到了麻烦,所以我想要一个我自己使用的解决方案,即使对于我无法控制的网站也是如此。

在 IE8 中,我可以取消选中“始终为 html 使用 ClearType”,然后在操作系统中禁用 ClearType,IE8 将显示所有字体的别名。但在 IE9 中,缺少此选项。

在对该问题进行一些研究后,我了解到:核心问题是 IE 依赖 DirectWrite 进行文本渲染,并且不支持任何更新的渲染选项,这些选项将在没有抗锯齿的情况下绘制文本并尊重用户的操作系统范围的默认选择。

更糟糕的是,如果您在操作系统中禁用 ClearType,在某些情况下 IE 将回退到 DirectWrite 的默认非 cleartype 抗锯齿,这甚至比 ClearType 更模糊。

【问题讨论】:

@BoltClock,可能想检查一下,你会感到惊讶。我认为 ManagedSpy 显示了这一点。 @SilverbackNet:我看到的都是谣言…… 微软已经发布了一个补丁来修复Windows上IE9中的字体...support.microsoft.com/kb/2545698 @David:补丁不起作用,这里是确认这一点的人:social.technet.microsoft.com/Forums/en/ieitprocurrentver/thread/… 【参考方案1】:

经过几天的搜索,我找到了一个MSDN Forums thread,它为我指出了一个解决方案:http://www.softwareninjas.ca/dwrite-dll-wrapper

按照该页面上的说明,您将从 IE9 中删除抗锯齿功能(至少 32 位版本的 IE 是默认 IE,即使在 64 位 Windows 7 上也是如此)。到目前为止,我已经在 Win7 x64 笔记本电脑上对其进行了测试,并且运行良好。

非常感谢 Olivier Dagenais 建造了这个。这是他的解决方案如何工作的技术摘要。

这是一个两步过程。首先,您需要通过注册表项在 IE 中禁用 ClearType。这与以前版本的 IE 中可用的设置相同,但它已从 IE UI 中删除,因为它在 IE9 中停止工作。

[HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main]
"UseClearType"="no"

其次,既然 ClearType 被禁用,Windows 将回退到非 cleartype 抗锯齿解决方案。现在,还需要禁用后备抗锯齿。引用上面的线程:

剩下的是字体平滑 (又名亚像素渲染),那就是 你仍然看到的“模糊效果” 关闭 cleartype 后。

如果您想知道,有一个 也可以关闭它。

我用来关闭的方法 亚像素奇迹是构建一个简单的 dwrite.dll 的包装器 拦截并转发呼叫到 真正的 dwrite.dll,禁用字体 在此过程中进行平滑处理。

您可以从以下地址下载:http://www.softwareninjas.ca/dwrite-dll-wrapper

您可以在以下位置找到代码 https://softwareninjas.kilnhg.com/Repo/Open-Source/Group/DWrite-dll-Wrapper

这是一个非常酷的 hack。可能在 Windows 和 DirectX 版本中有些脆弱,但现在可以解决问题,直到微软齐心协力解决 IE 本身潜在的“无法禁用抗锯齿”问题。

它也适用于使用 IE WebBrowser 控件(又名 MSHTML)的应用程序,因此您可以逐个应用程序控制抗锯齿。它也适用于 HTML 帮助查看器。

请注意,IE9 标准模式下的文本质量并不理想。具体来说,小字体有时会出现字母,有时它们之间没有通常的一像素空间。如果您在兼容模式下呈现相同的页面(或者您的站点使用非严格的 DTD 或其他不执行标准的 DTD),那么它看起来很好。因此,如果某些网站想要获得最佳的别名文本渲染,还需要额外的步骤:只需按下 IE 工具栏中的兼容性按钮,以兼容模式查看网站。

【讨论】:

微软已经发布了一个补丁来修复Windows上IE9中的字体...support.microsoft.com/kb/2545698 @David:就这个错误而言,该补丁没有任何影响【参考方案2】:

直接回答您的问题:

ClearType 字体渲染用于所有 IE9 文档模式;亚像素 定位仅在 IE9 中使用 默认标准模式。 IE9 兼容模式——Quirks、7 和 8 — 使用全像素文本指标。

所以尝试将您的文档类型切换为使用Quirks mode:

 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

要考虑的另一件事是尽量避免point based font sizes。


关于 IE9 中字体、模糊度和渲染的重要信息

IE 9 does not use sub-pixel antialiasing under certain conditions

MSDN 来源:

Sub-pixel Fonts in IE9 - blogs.msdn.com/b/ie/archive/2010/11/03/sub-pixel-fonts-in-ie9.aspx IE9's blurry font text - www.hanselman.com/blog/TheUltimateGuideOfFiveThingsForNewIE9UsersWhoFearChange.aspx Defining Document Compatibility Documents Mode

【讨论】:

【参考方案3】:

这里的信息解决了两个问题: 1.去掉IE9中的cleartype和字体平滑 2. IE10安装或自动安装时去掉cleartype和字体平滑

我做了一个注册黑客来关闭 IE9 中的 cleartype: [HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main] "UseClearType"="否" 并使用了一些免费软件来摆脱 IE9 中的字体平滑: https://softwareninjas.kilnhg.com/Repo/Open-Source/Group/DWrite-dll-Wrapper

然后IE10自动安装了自己,模糊类型又回来了。我尝试卸载 IE 10,不是通过添加/删除程序界面,而是通过已安装的更新界面——删除 IE10 更新。这表面上把我带回了 IE9,但模糊类型仍然存在,尽管“否”仍然是注册表中 cleartype 的答案,并且两个 .dll 文件仍然在我的 IE 程序文件夹中。

所以,我决定卸载 IE9 并重新安装它。这还涉及通过已安装的更新界面并删除 IE9 更新。

我重新启动并预计必须重新安装程序,但我的 IE 图标仍然存在。当我点击它时,IE9 以漂亮、清晰的字体打开。

【讨论】:

以上是关于在 IE9 中禁用 Cleartype(文本抗锯齿)的主要内容,如果未能解决你的问题,请参考以下文章

IE 9 在某些条件下不使用亚像素抗锯齿

在 QtQuick Text 元素中禁用字体抗锯齿

如何使用 webdriver (Java) 在 phantomjs 上禁用字体抗锯齿?

WinRT 和软件 ClearType 字体渲染

画布中的抗锯齿大文本

使 Windows 上的字体像 Mac/Linux 一样渲染:禁用字体提示和/或在客户端处理抗锯齿