我已經成功地在Xcode 7.2中使用Swift 2代碼將UIColor轉換爲CMYK值。但是,返回值類似於基於公式的轉換:Swift:使用ICC配置文件將RGB(UIColor)轉換爲CMYK
func RGBtoCMYK(rgbColor: UIColor) -> (c: CGFloat, m: CGFloat, y: CGFloat, k: CGFloat) {
/*
let iccFileName = "CoatedGRACoL2006"
let iccProfile: CFDataRef = CGDataProviderCreateWithFilename(iccFileName) as! CFDataRef
let colorSpace: CGColorSpaceRef = CGColorSpaceCreateWithICCProfile(iccProfile)!
*/
let colorSpace: CGColorSpaceRef = CGColorSpaceCreateDeviceCMYK()!
let intent = CGColorRenderingIntent.RenderingIntentPerceptual
let cmykColor = CGColorCreateCopyByMatchingToColorSpace(colorSpace, intent, rgbColor.CGColor, nil)
let c: CGFloat = round(CGColorGetComponents(cmykColor)[0] * 100)
let m: CGFloat = round(CGColorGetComponents(cmykColor)[1] * 100)
let y: CGFloat = round(CGColorGetComponents(cmykColor)[2] * 100)
let k: CGFloat = round(CGColorGetComponents(cmykColor)[3] * 100)
return (c, m, y, k)
}
相反,我想使用ICC配置文件。在註釋區域,我嘗試將ColorSpace從CGCreateDeviceCMYK()更改爲尋找NSData輸入的CGCreateWithICCProfile()。我從Adobe下載了標準CMYK ICC配置文件,並將「CoatedGRACoL2006.icc」拖入我的Asset.xcassets項目文件夾中。編譯代碼,但運行應用程序時會生成一長串錯誤。關於如何將ColorSpace更改爲基於ICC Profile的色彩空間,我們將不勝感激任何輸入,評論或建議。
謝謝emrys57和@weichsel。我能夠重現您的解決方案,以便使用colorSpace的ICC配置文件。有趣的是,在測試了多個ICC配置文件和CGColorRenderingIntent後,我得到了與我的初始colorSpace和intent相同的結果值。現在我想知道CGColorCreateCopyByMatchingToColorSpace方法是否按預期工作。如果任何人有其他建議將UIColors轉換爲CMYK值 - 請發佈! – Prepress