У меня уже есть некоторый код, который будет делать большую часть того, что мне нужно, используя NSIMage и NSColorSpace.К сожалению, я пытаюсь воссоздать изменение цветового пространства / профиля, которое происходит в Photoshop, и это немного сложнее, чем то, что может сделать NSColorSpace.Вы можете увидеть этот пост здесь: Использование ApplescriptObjC для преобразования цветовых пространств изображения с использованием NSColorSpace и iccProfileData
Так что мне нужна помощь, либо добавление следующего из CGColorSpace или воссоздание определенных частейсценария, чтобы они работали с самого начала с Core Graphics.Я хочу выполнить следующие функции: CGColorRenderingIntent с использованием kCGRenderingIntentPerceptual kCGColorConversionBlackPointCompensation Plus, использующий сглаживание как часть этого преобразования цветового пространства, но я не могу найти вариант для этого в документации Apple Objective-C.NSColor имеет NSColorRenderingIntentPerceptual, но не похоже, что есть BlackPointCompensation под NSColor.
Я думаю, что я определил все части, необходимые для создания этого скрипта.Я думаю, что сценарий уже частично написан.Мне просто нужна помощь, чтобы склеить последние несколько битов.
Я считаю, что скрипту все равно нужно будет открыть профиль в NSData (файл представляет собой ссылку на файл POSIX для профиля ICC, который я использую)
set theData to current application's NSData's dataWithContentsOfFile:theFile
Теперь мне нужно открыть изображение, я надеюсь, что это то же самое, используя NSColor или CGColor:
set theInput to (choose file with prompt "Choose RGB file")
set theOutput to (choose file name default name "Untitled.jpg")
set theImage to current application's NSImage's alloc()'s initWithContentsOfURL:theInput
set imageRep to theImage's representations()'s objectAtIndex:0
Вот то, что я вижу строку кода, которая мне нужна больше всегопомощь с.Это на самом деле, где преобразование цвета происходит с NSColorSpace:
set targetSpace to current application's NSColorSpace's alloc's initWithICCProfileData:theData
Кажется, что я должен использовать CGColorSpaceCreateICCBased с CGDataProviderRef, а затем theFile, но я сомневаюсь, что я могу просто поместить их вместо NSColorSpace иinitWithICCProfileData.Мне также нужно внедрить эту строку или новую строку, CGColorRenderingIntent, используя kCGRenderingIntentPerceptual и kCGColorConversionBlackPointCompensation (с дизерингом, если эта опция вообще существует).
Я не уверен, нужно ли обновлять следующие две строки, но я уверен, что третья строка может остаться прежней (или я действительно глуп, простите меня).
set theProps to current application's NSDictionary's dictionaryWithObjects:{1.0, true} forKeys:{current application's NSImageCompressionFactor, current application's NSImageProgressive}
set jpegData to bitmapRep's representationUsingType:(current application's NSJPEGFileType) |properties|:theProps
jpegData's writeToURL:theOutput atomically:true
Таким образом, входными данными будет RGB с универсальным файлом профиля sRGB, а выходными данными будет файл CMYK с определенным профилем CMYK (точнее GRACoL2013_CRPC6.icc).