为什么透明度会禁用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.