Профиль имени CGColorSpace

#swift #uicolor #color-profile #cgcolorspace

#swift #uicolor #цветовой профиль #cgcolorspace

Вопрос:

 let red = UIColor.red
print(red.cgColor.colorSpace!)
 

Результат таков
<CGColorSpace 0x60000332d260> (kCGColorSpaceICCBased; kCGColorSpaceModelRGB; sRGB IEC61966-2.1; extended range) .

Как я могу получить отдельные значения, такие как профиль имени sRGB IEC61966-2.1 в виде строки?

Комментарии:

1. Вы имеете в виду профиль ICC, а iOS не имеет общедоступного API для получения тегов профиля ICC (только непрозрачные данные из CGColorSpaceCopyICCData), поэтому вы можете найти полезные сторонние библиотеки 3d, такие как sourceforge.net/projects/sampleicc , если вам действительно нужна эта информация (зачем? все системные цвета указаны в sRGB — это задокументировано). Пожалуйста, обратите внимание, что профиль ICC является необязательным и может отсутствовать в colorspace.

2. Может быть, это единственная дорога, но в гору. В 2021 году с эволюцией, которая привела к появлению iOS, padOS и качеству дисплеев, поддерживающих гораздо более широкие цветовые пространства, чем sRGB, абсурдно, что еще не все API macOS. Даже просто для получения имени профиля, такого как sRGB или DisplayP3!

3. Скажи это Apple ))

4. Уже сделано! Я сомневаюсь, что получу ответ.

Ответ №1:

Кстати, я думаю, это решает вашу проблему:

 let color = UIColor.red
let value = String(describing: color.cgColor.colorSpace)
let profileName = value.split(separator: ";")[2].trimmingCharacters(in: .whitespacesAndNewlines)
print(profileName)
 

sRGB IEC61966-2.1

Комментарии:

1. Как отметил здесь Аспери, у Apple нет общедоступного API для получения тегов профиля ICC. Я все равно ценю попытку!