Чому кольори певних файлів PNG спотворюються при відкритті в Illustrator?


11

Я намагався відкрити скріншот iPhone в Illustrator, але кольори чомусь спотворені. Якщо я відкрию той самий файл у будь-якій іншій програмі (Photoshop, GIMP, Preview тощо), кольори стануть відмінними. Цікавим є те, що це відбувається лише з певними скріншотами, оскільки я протестував знімок головного екрану, який Illustrator відкривав, не спотворюючи кольори.

Хоча з GIMP з'являється діалогове вікно, де зазначено:

У зображення "IMG_1199.PNG" є вбудований кольоровий профіль:

Дисплей P3

Перетворити зображення в робочий простір RGB (вбудований sRGB)?

З можливістю зберегти або перетворити кольоровий профіль; що змушує мене Illustrator може не розпізнавати згаданий кольоровий профіль.

Ось оригінальне зображення безпосередньо з телефону [зліва] та зображення, відкрите (потім збережене) з Illustrator [праворуч]:

Знімок екрана клавіатури iPhone Знімок екрана клавіатури iPhone спотворений


Оновлення

Перетворення кольорового профілю в GIMP, збереження та повторне відкриття файлу в Illustrator вирішує проблему. Це, здається, підтверджує мою підозру, що кольоровий профіль Display P3 - це проблема, яка дещо змінює моє питання: як я можу відкрити зображення в Illustrator, не попередньо перетворюючи зображення заздалегідь?

Здається, це може бути помилка в Illustrator, тому я подав звіт про помилку в Adobe. Я оновлю, якщо звіт є остаточним або якщо Adobe пропонує рішення.


1
Психоделічний! Я знаю людей, які їдять таблетки, щоб це побачити. Ей, Брайан, ласкаво просимо на GDSE і дякуємо за запитання. Якщо у вас є якісь питання щодо цього SE, загляньте в довідковий центр або не соромтесь приєднатися до нас у чаті з графічним дизайном ! Продовжуйте сприяти і насолоджуйтесь тут.
Вінсент

У мене було багато проблем із скріншотами iPhone, але я ніколи нічого подібного не мав. Вражає.
Кай

Чи кольоровий профіль P3 передбачає колір 10bpp (він же 30bit)? Це помилка чи AI просто не в змозі обробити 10bpp (ARGB 02 10 10 10)? Розпитування розуму хочете знати. (редагувати: щоб бути зрозумілим, я дуже хочу знати, як у мене немає поняття)
Yorik

Дивно: і GraphicsMagick, identifyі Linux ' fileідентифікують знімок екрана зліва як jpg, незважаючи на суфікс .png. Це оригінальний / немодифікований скріншот? Ви перейменували суфікс у .png? Можливо, в цьому і проблема. Спробуйте змінити суфікс на jpg та відкрийте його знову.
Socowi

@Socowi Хм, це дивно, я тестував це сам, використовуючи fileкоманду на macOS. Він також з'являється JPEG image data, хоча інформаційне вікно все ще відображає його як файл PNG. Має бути щось, що Імгур робить для масштабування фотографій. Якщо ви завантажте зображення з посилання повнорозмірноюfile команда повинна визнати це правильно , так як файл PNG.
Брайан

Відповіді:


9

Що, мабуть, трапляється: скріншот - це 16-розрядний png, але ілюстратор читає його як 8-бітний png, використовуючи лише 8 нижніх (!) Біт.

Пояснення

Для наступного пояснення ми припускаємо, що скріншот - це 16-бітове зображення в градаціях сірого, тобто кожен піксель - це число між

чорний = 0 = 0x0000 = 0b 0000 0000 0000 0000

і

(16-бітний) білий = 2 ^ 16-1 = 65535 = 0xFFFF = 0b 1111 1111 1111 1111.

(0x позначає шістнадцяткові числа, а 0b позначає двійкові числа)

Здається, Illustrator завантажує лише 8 з цих 16 біт, на жаль, неправильних, тобто найменш значущих. Вибір найменш значущих бітів - єдина проблема.

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

Після імпорту ілюстратор масштабує інтерпретацію (яке число є білим, яке - чорним) відповідно до нового максимального числа:

(8-бітний) білий = 2 ^ 8-1 = 255 = 0xFF = 0xb 1111 1111.

Припустимо, один з наших пікселів мав значення 0b 1111 1111 0000 00001 = 0xFF01 = 65281, тобто майже біле. Після імпорту значення буде 0b 0000 0001 = 0x01 = 1, тобто майже чорним.

Це як "округлення" 999,1 до 1 - абсолютно неправильно!

Моделювання

Як ми можемо бути впевнені, що описана проблема є нашою проблемою? Ми імітуємо помилку!

Наступна програма python завантажує 16-бітний скріншот, як описано вище.
(Будь ласка, не судіть мене, це моя найперша програма пітона.)

#! /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.png
Натисніть тут, щоб отримати оригінальний розмір, і тут, щоб порівняти з версією OP.

Як ми бачимо, наше моделювання дає точно такий же результат.

Обхід

Я можу придумати лише один спосіб вирішення (оскільки я не використовую ілюстратор):

Перетворіть свої скріншоти у 8-бітні PNG

GraphicsMagick та / або ImageMagick - це консольні інструменти, які зручні для цієї роботи. Наступна команда перетворюється на 8-бітні png:

convert original.png -depth 8 converted.png

Вау, дякую за глибоке пояснення. Adobe ще не відповіла на мій звіт про помилку, але, на щастя, сподіваємось, вони додадуть належну 16-бітну підтримку кольорів для Illustrator. Або як мінімум округлити їх до 8-бітового кольору правильно.
Брайан

1

Тепер це якесь прикольне питання.

GIMP вже дає нам деяку підказку, підтверджуючи підозру, що це щось із кольоровим профілем скріншоту. Перетворення його у ваш щоденний sRGB та 8 біт на канал може уникнути Illustrator зіпсувати речі, намагаючись витягнути його як CMYK.


1

Це WAY пізно, але простим вирішенням (для користувачів Mac) є відкриття PNG у режимі попереднього перегляду, а потім експортувати його як PNG, перемикаючи 16-бітну опцію за замовчуванням на 8-бітну опцію. Для цього не потрібно додаткового програмного забезпечення, і він займає лише кілька секунд.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.