与所有其他 PDF 查看器相比,我通常更喜欢 Adobe Reader(在 Linux 上仍为 v9),因为我认为它的渲染质量最好,尽管其他浏览器最近已经赶上来了。这种渲染质量似乎在很大程度上归功于 CoolType,这是 Adobe 的子像素渲染实现。不幸的是,我发现只要页面包含透明元素,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
这可能是 Adobe 的一个错误,最好在他们的论坛中提出。
为了改善 Linux 中的字体显示,您可以尝试使用 Infiniality:
Infinality 是一组 Freetype 补丁,旨在为 Linux 提供改进的字体渲染,同时允许轻松自定义,以便用户可以根据自己的喜好调整设置。使用它,您可以轻松设置字体样式以模拟 OSX、OSX2、Windows 98、WIndows XP 或 Windows 7,或者您可以使用“Linux”或“Infinality”(默认)样式。
看 :