Por que as cores de certos arquivos PNG ficam distorcidas quando abertas no Illustrator?

11

Eu estava tentando abrir uma captura de tela do iPhone no Illustrator, mas por algum motivo as cores estão distorcidas. Se eu abrir o mesmo arquivo em qualquer outro aplicativo (Photoshop, GIMP, Preview etc.), as cores ficarão bem. O curioso é que isso só ocorre com determinadas capturas de tela, como também testei uma captura de tela da tela inicial, que o Illustrator abriu sem distorcer as cores.

Embora, com o GIMP, uma caixa de diálogo apareça dizendo:

A imagem 'IMG_1199.PNG' possui um perfil de cores incorporado:

Visor P3

Converter a imagem no espaço de trabalho RGB (sRGB embutido)?

Com a opção de manter ou converter o perfil de cores; o que me faz pensar que o Illustrator pode não reconhecer o perfil de cores mencionado acima.

Aqui está a imagem original diretamente do telefone [esquerda] e a imagem aberta (depois salva) no Illustrator [direita]:

Captura de tela do teclado do iPhone Captura de tela do teclado do iPhone distorcida


Atualizar

Converter o perfil de cores no GIMP, salvar e abrir o arquivo novamente no Illustrator corrige o problema. Isso parece confirmar minha suspeita de que o perfil de cores do Display P3 seja o problema, o que muda um pouco a minha pergunta: como posso abrir a imagem no Illustrator sem antes convertê-la antes?

Parece que pode haver um erro no Illustrator, então enviei um relatório de erro para a Adobe. Vou atualizar se o relatório for conclusivo ou se a Adobe fornecer uma solução.

Bryan
fonte
1
Psicodélico! Conheço pessoas que tomam pílulas para ver isso. Olá Bryan, bem-vindo ao GDSE e obrigado pela sua pergunta. Se você tiver alguma dúvida sobre este SE, consulte a Central de Ajuda ou sinta-se à vontade para se juntar a nós no Chat de design gráfico ! Continue contribuindo e aproveite seu tempo aqui.
19416 Vincent
Eu tive muitos problemas com as capturas de tela do iPhone, mas nunca tive nada parecido. Impressionante.
Cai
Um perfil de cores P3 implica cores de 10bpp (também conhecido como 30 bits)? Isso é um bug ou a IA simplesmente não consegue lidar com 10bpp (ARGB 02 10 10 10)? Mentes inquiridoras querem saber. (edit: para ser claro, eu realmente quero saber, como eu não tenho nenhuma pista)
Yorik
Estranho: Tanto o GraphicsMagick identifyquanto o Linux ' fileidentificam sua captura de tela postada à esquerda como jpg, apesar do sufixo .png. Esta é a captura de tela original / não modificada? Você renomeou o sufixo para .png? Talvez esse seja o problema. Tente alterar o sufixo para jpg e abra-o novamente.
Socowi 19/10/16
@Socowi Huh, isso é estranho, eu mesmo testei usando o filecomando no macOS. Ele também aparece JPEG image data, embora a janela de informações ainda o exiba como um arquivo PNG. Imgur deve fazer algo para dimensionar as fotos. Se você baixar a imagem no link em tamanho real, o filecomando deve reconhecê-la corretamente como um arquivo PNG.
19716 Bryan

Respostas:

9

O que provavelmente acontece: A captura de tela é um png de 16 bits, mas o ilustrador a lê como um png de 8 bits, usando apenas os 8 bits inferiores (!).

Explicação

Para a explicação a seguir, assumimos que a captura de tela é uma imagem em escala de cinza de 16 bits, ou seja, todo pixel é um número entre

preto = 0 = 0x0000 = 0b 0000 0000 0000 0000

e

(16 bits) branco = 2 ^ 16-1 = 65535 = 0xFFFF = 0b 1111 1111 1111 1111.

(0x indica números hexadecimais e 0b indica números binários)

O Illustrator parece carregar apenas 8 desses 16 bits, infelizmente os errados, que são os menos significativos. Escolher os bits menos significativos é o único problema.

0b #### #### #### ####
   \_______/ \_______/
   discarded   loaded

Após a importação, o ilustrador escalará a interpretação (que número é branco, que é preto) de acordo com o novo número máximo:

(8 bits) branco = 2 ^ 8-1 = 255 = 0xFF = 0xb 1111 1111.

Suponha que um de nossos pixels tenha o valor 0b 1111 1111 0000 00001 = 0xFF01 = 65281, que é quase branco. Após a importação, o valor será 0b 0000 0001 = 0x01 = 1, que é quase preto.

É como "arredondar" 999,1 para 1 - completamente errado!

Simulação

Como podemos ter certeza de que o problema descrito é o nosso problema? Simulamos o bug!

O programa python a seguir carrega a captura de tela de 16 bits, conforme descrito acima.
(Por favor, não me julgue, é o meu primeiro programa python.)

#! /usr/bin/python
import numpy as np
import cv2

# load picture
img = cv2.imread('screen.png', 3)

# assert (by hand) that picture is loaded as 16 bit image
print img.dtype

# simulate the bug
img[:,:] &= 0x00FF # use only 8 least significant bits
img[:,:] <<= 8     # rescale

# save the picture
cv2.imwrite('bug.png',img)

Bug simulado
o resultado bug.png
Clique aqui para ver o tamanho original e aqui para comparar com a versão do OP.

Como podemos ver, nossa simulação produz exatamente o mesmo resultado.

Gambiarra

Só consigo pensar em uma solução alternativa (já que não uso o ilustrador):

Converta suas capturas de tela em pngs de 8 bits

GraphicsMagick e / ou ImageMagick são ferramentas de console convenientes para este trabalho. O comando a seguir converte em pngs de 8 bits:

convert original.png -depth 8 converted.png
Socowi
fonte
Uau, obrigado pela explicação detalhada. A Adobe ainda não respondeu ao meu relatório de erros, mas, com sorte, espero que eles adicionem suporte de cores de 16 bits adequado ao Illustrator. Ou pelo menos arredondá-los para cores de 8 bits corretamente.
Bryan
1

Agora essa é uma questão descolada.

O GIMP já nos dá uma pista, confirmando a suspeita de que seja algo com o perfil de cores da captura de tela. Convertê-lo no sRGB diário e 8 bits por canal pode evitar que o Illustrator atrapalhe as coisas ao tentar extraí-lo como CMYK.

Lucas Flicky
fonte
1

Isso está muito atrasado, mas uma solução simples (para usuários de Mac) é abrir o PNG na visualização e exportá-lo como PNG, alternando a opção padrão de 16 bits para a opção de 8 bits. Não requer nenhum software adicional e leva apenas alguns segundos.

Argila
fonte