Pourquoi les couleurs de certains fichiers PNG sont-elles déformées lors de leur ouverture dans Illustrator?

11

J'essayais d'ouvrir une capture d'écran iPhone dans Illustrator, mais pour une raison quelconque, les couleurs sont déformées. Si j'ouvre le même fichier dans une autre application (Photoshop, GIMP, Aperçu, etc.), les couleurs sont bien rendues. Ce qui est curieux, c'est que cela ne se produit qu'avec certaines captures d'écran, car j'ai également testé une capture d'écran de l'écran d'accueil, qu'Illustrator a ouverte sans déformer les couleurs.

Cependant, avec GIMP, une boîte de dialogue apparaît:

L'image 'IMG_1199.PNG' a un profil de couleur intégré:

Affichage P3

Convertir l'image en espace de travail RVB (intégré sRGB)?

Avec l'option de conserver ou de convertir le profil de couleur; ce qui me fait penser qu'Illustrator peut ne pas reconnaître le profil de couleurs susmentionné.

Voici l'image originale directement depuis le téléphone [à gauche] et l'image ouverte (puis enregistrée) depuis Illustrator [à droite]:

Capture d'écran du clavier iPhone Capture d'écran du clavier iPhone déformée


Mise à jour

La conversion du profil de couleurs dans GIMP, l'enregistrement, puis la réouverture du fichier dans Illustrator corrige le problème. Cela semble confirmer mon soupçon que le profil de couleur de l'affichage P3 est le problème, ce qui modifie quelque peu ma question: comment puis-je ouvrir l'image dans Illustrator sans d'abord convertir l'image au préalable?

Il semble que ce soit un bogue dans Illustrator, j'ai donc soumis un rapport de bogue à Adobe. Je mettrai à jour si le rapport est concluant ou si Adobe fournit une solution.

Bryan
la source
1
Psychédélique! Je connais des gens qui mangent des pilules pour voir ça. Salut Bryan, bienvenue à GDSE et merci pour ta question. Si vous avez des questions à propos de cette SE, consultez le centre d'aide ou n'hésitez pas à nous rejoindre dans le chat de conception graphique ! Continuez à contribuer et profitez de votre temps ici.
Vincent
J'ai eu beaucoup de problèmes avec les captures d'écran d'iPhone, mais je n'ai jamais rien vu de tel. Impressionnant.
Cai
Un profil de couleur P3 implique-t-il une couleur de 10 bpp (alias 30 bits)? Est-ce un bug ou l'IA n'est-elle tout simplement pas capable de gérer 10bpp (ARGB 02 10 10 10)? Les esprits curieux veulent savoir. (modifier: pour être clair, je veux vraiment savoir, car je n'ai aucune idée)
Yorik
Étrange: GraphicsMagick identifyet Linux ' fileidentifient tous les deux votre capture d'écran postée comme un jpg malgré son suffixe .png. Est-ce la capture d'écran originale / non modifiée? Avez-vous renommé le suffixe en .png? C'est peut-être le problème. Essayez de changer le suffixe en jpg et ouvrez-le à nouveau.
Socowi
@Socowi Huh, c'est étrange, je l'ai testé moi-même en utilisant la filecommande sur macOS. Il apparaît JPEG image dataégalement, même si la fenêtre d'informations l'affiche toujours sous la forme d'un fichier PNG. Ce doit être quelque chose qu'Imgur fait pour mettre les photos à l'échelle. Si vous téléchargez l'image à partir du lien en taille réelle, la filecommande doit la reconnaître correctement en tant que fichier PNG.
Bryan

Réponses:

9

Ce qui se passe probablement: la capture d'écran est un png 16 bits, mais l'illustrateur la lit comme un png 8 bits, en utilisant uniquement les 8 bits inférieurs (!).

Explication

Pour l'explication suivante, nous supposons que la capture d'écran est une image en niveaux de gris 16 bits, c'est-à-dire que chaque pixel est un nombre compris entre

noir = 0 = 0x0000 = 0b 0000 0000 0000 0000

et

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

(0x désigne des nombres hexadécimaux et 0b désigne des nombres binaires)

Illustrator semble ne charger que 8 de ces 16 bits, malheureusement les mauvais, c'est-à-dire les moins significatifs. Le choix des bits les moins significatifs est le seul problème.

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

Après l'importation, l'illustrateur mettra à l'échelle l'interprétation (quel nombre est blanc, qui est noir) en fonction du nouveau nombre maximum:

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

Supposons qu'un de nos pixels ait la valeur 0b 1111 1111 0000 00001 = 0xFF01 = 65281, c'est-à-dire presque blanc. Après l'importation, la valeur sera 0b 0000 0001 = 0x01 = 1, c'est-à-dire presque noire.

C'est comme "arrondir" 999.1 à 1 - complètement faux!

Simulation

Comment pouvons-nous être sûrs que le problème décrit est notre problème? Nous simulons le bug!

Le programme python suivant charge la capture d'écran 16 bits comme décrit ci-dessus.
(S'il vous plaît, ne me jugez pas, c'est mon tout premier programme 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 simulé
le résultat bug.png
Cliquez ici pour la taille originale, et ici pour comparer avec la version OP.

Comme nous pouvons le voir, notre simulation donne exactement le même résultat.

solution de contournement

Je ne peux penser qu'à une solution (car je n'utilise pas d'illustrateur):

Convertissez vos captures d'écran en pngs 8 bits

GraphicsMagick et / ou ImageMagick sont des outils de console qui conviennent à ce travail. La commande suivante convertit en pngs 8 bits:

convert original.png -depth 8 converted.png
Socowi
la source
Wow, merci pour l'explication approfondie. Adobe n'a pas encore répondu à mon rapport de bogue, mais avec un peu de chance, j'espère qu'ils ajouteront une prise en charge des couleurs 16 bits appropriée à Illustrator. Ou au moins arrondissez-les correctement à une couleur 8 bits.
Bryan
1

Maintenant, c'est un problème génial.

GIMP nous donne déjà quelques indices, confirmant le soupçon que c'est quelque chose avec le profil de couleur de la capture d'écran. La conversion de votre sRGB quotidien et de 8 bits par canal peut éviter à Illustrator de gâcher les choses en essayant de le tirer en CMJN.

Lucas Flicky
la source
1

C'est bien en retard, mais une solution de contournement simple (pour les utilisateurs Mac) consiste à ouvrir le PNG dans l'aperçu, puis à l'exporter en tant que PNG en basculant l'option 16 bits par défaut vers l'option 8 bits. Il ne nécessite aucun logiciel supplémentaire et ne prend que quelques secondes.

Argile
la source