Por que a transparência desabilita a renderização de subpixel no Adobe Reader?


9

Normalmente, prefiro o Adobe Reader (ainda v9 no Linux) a todos os outros visualizadores de PDF, porque acho que ele tem a melhor qualidade de renderização, mesmo que outros tenham se recuperado ultimamente. Essa qualidade de renderização parece ser em grande parte devido ao CoolType, a implementação da Adobe de renderização de subpixel. Infelizmente, descobri que o Adobe Reader desativa consistentemente a renderização de subpixel (por página) assim que a página contém elementos transparentes. Um exemplo:

A forma azul é opaca, o texto é processado usando subpixels:

opaco

A forma azul é 50% transparente, o texto é renderizado com antialiasing padrão:

transparente

Os dois arquivos pdf correspondentes foram gerados exatamente da mesma maneira (usando TikZ / PGF com pdflatex), exceto para especificar a transparência no segundo caso. Eu mesmo fiz esses PDFs, mas frequentemente observei o mesmo efeito com os PDFs de fontes completamente diferentes. Estranhamente, Foxit Reader e Okular processam os mesmos dois PDFs de uma maneira exatamente idêntica (exceto, é claro, pela parte transparente em si), mas com uma qualidade geralmente pior em IMHO.

Minha pergunta: alguém sabe por que isso acontece e se / como isso pode ser evitado?


Isso pode ser um bug na Adobe, mais suscitado em seus fóruns. Você pode tentar melhorar a exibição da fonte no Linux (qual versão?) Usando o Infinality . Veja também archlinux Font Configuration - Infinality .
— precisa

@harrymc Duvido que isso afete a renderização da fonte do Adobe Reader, mas, caso contrário, é uma dica interessante. Talvez o Okular melhore dessa maneira. Obrigado!
— A.Delda

@ Slhck, eu pensei que tinha colocado uma recompensa por isso? Você assumiu isso de alguma forma, ou estou apenas confuso? Obrigado mesmo assim!
— A.Delda

Respostas:


1

A renderização de subpixel é feita usando as cores individuais de um pixel. Cada pixel em uma tela é composto por um pixel ainda menor com as cores vermelho, verde e azul.

Se você deseja renderizar um objeto com 10,3 pixels de largura, use apenas a cor vermelha do 11º pixel. A tela então emitia luz de 31 subpixels, ou seja, 10 pixels completos e depois um terço de pixel.

Se você tentar simular esse efeito, simplesmente desenhando 10 pixels brancos de largura e, em seguida, um pixel vermelho à direita em um fundo preto, você mesmo verá o efeito.

O problema é que você notaria que a borda direita seria vermelha, se você simplesmente fizer dessa maneira. Provavelmente, a Adobe precisa usar algoritmos avançados para cancelar esse efeito - possivelmente amplificando o valor do vermelho e do verde do décimo pixel.

Adicionar transparência a um algoritmo já avançado é provavelmente algo que eles ainda não resolveram e, portanto, simplesmente desativam a renderização de subpixel.

Acredito que seja esse o caso, porque tentei implementar o subpixel de maneira ingênua e vi o efeito "lado colorido".


Sim, o efeito da borda colorida está definitivamente lá, você pode vê-lo também nas capturas de tela ampliadas acima, e eu realmente não vejo como isso poderia ser evitado. Eu acho que a renderização de subpixel só faz sentido quando os pixels inteiros já são pequenos. Talvez você esteja certo, que é muito complicado.
— A.Delda

Eu acredito que eles são muito complicados. Se não, a tecnologia não seria digno de tais nomes legais :)
— frodeborli

Apenas uma observação: a ordem dos subpixels nem sempre pode ser RGB. Se olharmos para as capturas de tela fornecidas pelo OP, ele parece ser pedido pelo BGR: os subpixels nas bordas esquerdas são vermelhos, enquanto os subpixels nas bordas direitas são azuis.
— Johan Boulé

0

Isso pode ser um bug na Adobe, mais suscitado em seus fóruns.

Para melhorar a exibição da fonte no Linux, você pode tentar usar o Infinality:

Infinality é um conjunto de patches Freetype que tentam fornecer uma renderização de fonte aprimorada para Linux e também, para permitir fácil personalização para que os usuários possam ajustar as configurações de acordo com suas preferências. Com ele, você pode definir facilmente o estilo da fonte para emular OSX, OSX2, Windows 98, Windows XP ou Windows 7 ou usar os estilos "Linux" ou "Infinalidade" (padrão).

Vejo :

Melhor renderização de fontes no Linux, com Infinality
archlinux Font Configuration - Infinality .


Aprecio as dicas e vou pedir nos fóruns da Adobe. No entanto, não acho que isso seja qualificado como resposta.
— A.Delda

Sem problemas. Deseja que eu apague isso?
— harrymc

Não, eu só queria explicar por que não votei.
— A.Delda

Infelizmente, esta parece ser a única resposta que você receberá.
— harrymc
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.