为什么透明度会禁用 Adob​​e Reader 中的子像素渲染?

为什么透明度会禁用 Adob​​e Reader 中的子像素渲染?

与所有其他 PDF 查看器相比,我通常更喜欢 Adob​​e Reader(在 Linux 上仍为 v9),因为我认为它的渲染质量最好,尽管其他浏览器最近已经赶上来了。这种渲染质量似乎在很大程度上归功于 CoolType,这是 Adob​​e 的子像素渲染实现。不幸的是,我发现只要页面包含透明元素,Adobe Reader 就会始终关闭子像素渲染(以每页为基础)。例如:

蓝色形状不透明,文本使用子像素呈现:

不透明

蓝色形状透明度为 50%,文本使用标准抗锯齿呈现:

透明的

两个相应的 pdf 文件以完全相同的方式生成(使用 TikZ/PGF 和 pdflatex),除了在第二种情况下指定透明度。我自己制作了这些 pdf,但我经常观察到来自完全不同来源的 pdf 具有相同的效果。奇怪的是,Foxit Reader 和 Okular 以完全相同的方式呈现相同的两个 pdf(当然透明部分本身除外),但在我看来质量通常更差。

我的问题:有人知道为什么会发生这种情况,以及是否/如何避免这种情况?

答案1

子像素渲染是利用像素的单个颜色来实现的。屏幕上的每个像素都是由更小的红、绿、蓝像素组成的。

如果要渲染宽度为 10.3 像素的物体,则只能使用第 11 个像素的红色。然后屏幕将从 31 个子像素(即 10 个全像素和 1/3 个像素)发光。

如果您尝试自己模拟这种效果,只需在黑色背景上绘制 10 个白色像素宽,然后在右侧绘制一个红色像素,您就会亲眼看到这种效果。

问题是,如果您只是这样做的话,您会注意到右边缘会是红色。最有可能的是,Adobe 必须使用高级算法来抵消这种影响 - 可能是通过放大第 10 个像素的红色和绿色的值。

在已经相当先进的算法中添加透明度可能是他们尚未解决的问题,因此他们只是禁用子像素渲染。

我相信情况确实如此,因为我曾尝试以这种简单的方式自己实现子像素渲染,并且亲眼看到了“彩色侧面”效果。

答案2

这可能是 Adob​​e 的一个错误,最好在他们的论坛中提出。

为了改善 Linux 中的字体显示,您可以尝试使用 Infiniality:

Infinality 是一组 Freetype 补丁,旨在为 Linux 提供改进的字体渲染,同时允许轻松自定义,以便用户可以根据自己的喜好调整设置。使用它,您可以轻松设置字体样式以模拟 OSX、OSX2、Windows 98、WIndows XP 或 Windows 7,或者您可以使用“Linux”或“Infinality”(默认)样式。

看 :

使用 Infinality 在 Linux 上实现更好的字体渲染
archlinux 字体配置 - Infinity

相关内容