为什么透明度会禁用Adobe Reader中的亚像素渲染?


9

我通常比其他所有PDF查看器都更喜欢Adobe Reader(在Linux上仍为v9),因为我认为它具有最佳的呈现质量,尽管最近其他人也追赶了它。归因于CoolType(Adobe的亚像素渲染实现),这种渲染质量似乎很大。不幸的是,我发现只要页面包含透明元素,Adobe Reader就会始终关闭(以每页为基础)子像素渲染。一个例子:

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

不透明

蓝色形状是50%透明的,使用标准的抗锯齿渲染文本:

透明

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

我的问题:有人知道为什么会这样吗?是否/如何避免?


这可能是Adobe中的错误,在他们的论坛中提出的更好。您可以尝试使用Infinality改善Linux(哪个版本?)中的字体显示。另请参见archlinux字体配置-无穷。
— harrymc

@harrymc我怀疑这会影响Adobe Reader字体的呈现,但是否则这是一个有趣的提示。也许Okular这样会变得更好。谢谢!
— A. Donda 2013年

@slhck,我以为我已经为此悬赏?您是否以某种方式接管了这件事,还是我感到困惑?还是要谢谢你!
— A. Donda 2013年

Answers:


1

通过使用像素的各个颜色来完成子像素渲染。屏幕上的每个像素都由颜色更小的红色,绿色和蓝色像素组成。

如果要渲染宽度为10.3像素的对象,则仅使用第11像素的红色。然后,屏幕将发出来自31个子像素的光,即10个完整像素,然后是像素的三分之一。

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

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

向已经相当高级的算法添加透明度可能是他们尚未解决的问题,因此,他们只是禁用了亚像素渲染。

我相信情况确实如此,因为我尝试以这种幼稚的方式实现亚像素渲染,并且看到了“彩色面”对自己的影响。


是的,肯定有彩色边缘效果,您也可以在上面的放大屏幕快照中看到它,但我真的不知道如何避免这种情况。我认为仅当整个像素已经很小时,亚像素渲染才有意义。也许你是对的,那太复杂了。
— A. Donda 2014年

我相信它们太复杂了。如果不是这样的话,这项技术就不值得这么酷了:)
— frodeborli 2014年

请注意:子像素的顺序可能并不总是RGB。如果我们看一下OP提供的屏幕截图,它似乎是BGR排序的:左边缘的子像素为红色,而右边缘的子像素为蓝色。
— JohanBoulé'17

0

这可能是Adobe中的错误,在他们的论坛中提出的更好。

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

Infinality是一组Freetype修补程序,它们试图为Linux提供改进的字体渲染,并且还允许轻松定制,以便用户可以根据自己的喜好调整设置。使用它,您可以轻松地设置字体样式以模拟OSX,OSX2,Windows 98,WINDOWS XP或Windows 7,或者可以使用“ Linux”或“ Infinality”(默认)样式。

见:

具有Infinality的Linux中更好的字体渲染
archlinux字体配置-Infinality。


我感谢这些提示,并且我将在Adobe论坛中提问。但是,我认为这不能作为答案。
— A. Donda 2013年

没问题。您要我删除吗?
— harrymc 2013年

不,我只是想解释为什么我不投票。
— A. Donda 2013年

不幸的是,这似乎是您将获得的唯一答案。
— harrymc
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.