使用ICC配置文件将RGB转换为CMYK

我即将RGB颜色转换为CMYK用于打印目的。 此转换的比例是Adobe Photoshop ( Image -> Mode -> CMYK color )

我尝试了2个解决方案,但没有一个返回正确的值:

解决方案1 ​​ – 使用.NET Framework

首先,我接着是这些步骤

  • 从Adobe下载ICC配置文件(Windows版本)

  • #color转换为CMYK

  • 使用System.Windows.Media.Color.FromValues // return Color MSDN

  • string convretedColor = string.Format("#{0:X2}{1:X2}{2:X2}", _color.R, _color.G, _color.B)

这是结果:

  • 个人资料: CoatedFOGRA27.icc

  • 原色: #2f00ff

  • 转换颜色: #3b4996

  • 转换结果使用Adobe Photoshop(相同的配置文件): #3b4996 甚至没有关闭!

解决方案2 – 使用Windows Color System(WCS)

我也用相同的程序尝试了Codo的解决方案

这是结果:

  • 简介: CoatedFOGRA27.icc

  • 原色: #2f00ff

  • 转换颜色: #2032FF

  • Photoshop: #3b4996

JSFiddle进行比较

编辑

根据Codo的评论,我认为,我有一些理解颜色概念的基本问题! (如果我错了,请纠正我)

对于任何颜色,我们有不同的颜色模型, RGBCMYK ,…

RGB显示(红绿蓝)组合以生成颜色和CMYK(青色洋红色黄色*)。 这些模型的值可以轻松转换为彼此。

例如 :

  • RGB HEX: #2F00FF

  • RGB: 47 - 0 - 255

  • CMYK: 0,816 - 1,000 - 0,000 - 0,000

几乎所有显示器都使用RGB来显示颜色。打印的颜色(因为使用墨水代替LED o …)与您在显示器上看到的颜色完全不同/

对于这个问题,像Photoshop这样的图像编辑器使用CMYK **MODE** 。在这种模式下,如果选择RGB颜色,编辑器会将其转换为打印后看到的颜色并显示为屏幕。此转换完全取决于颜色配置文件(此处为ICC)

编辑2

在此处输入图像描述

让我试着帮你整理一下:

1)RGB是描述颜色值的格式。 即:红色为255,0,0。

2)HSV是描述颜色值的另一种格式。 即:0,100,100为红色

这两个是唯一能给你数字准确颜色的
您可以将它们视为颜色的数字表示或它是真正的DNA并感谢上帝,显示器能够呈现它们 – 正是它们的本质。

让我们继续:

3)Lab是描述颜色值的另一种格式。

红色RGB为541,70,但是为(255,0,0)..
54,61,70也适用于不同的RGB ..(254,0,0)

这是为什么? 因为Lab格式旨在接近人类视觉。
对于人眼来说,(255,0,0)和(254,0,0)之间没有区别
嗯..对于人眼而言真的不准确
更准确地说,用于获得实验室颜色的模型有意…

4)CYMK旨在告诉打印机将青色,黄色和洋红色的混合物压在纸上,然后用K(键或黑色)压入多少黑色进入混合物。

所以0%,100%,100%,0%会给我们红色的混合物..
和0%,50%,50%,0%将给我们粉红色。

让我们继续:

您的努力是将显示器中看到的RGB调整为打印机的CMYK。
上帝知道为什么你想要这样做,因为它是完全自动的并且由驾驶员处理多年。
但我认为你有理由,所以让我们继续,
每台打印机都有一个稍微不同的CMYK值来混合以获得特定的红色..

这就是ICC简介发挥作用的地方..
他们通过提供(1)原始RGB-RED和(2)特定打印机中的CMYK红色表来为RED提供标准。

因此,根据ICC配置文件从RGB(红色)转换为CMYK(红色)是合乎逻辑的。

但是,如果您尝试转换回来 – 您会注意到根据特定配置文件的RED的CMYK可以具有多个数字RED值。

这是因为数字色彩分辨率比印刷纸张更精确,另一种看待它的方式是说特定的打印机ICC可以建立在实验室上。

现在我知道了……我知道..你可能已经知道了大部分内容,如果不是全部的话。
(我写这篇文章只是为了确保我们都在同一页的书中。)

所以,当你说“他们都没有返回正确的价值”(假设他们=转换)你究竟是什么意思?! 对我来说似乎都是正确的,因为实际上它们确实会返回正确的值 – 用于打印目的。

我看到理论……

CMYK的色域本身略小于RGB,因此直接RGB-> CMYK转换后的差异将很容易看出。 为了补偿使用差异颜色配置文件。 内部颜色配置文件实际上是一组颜色变换,可以扩大色域。 在这种情况下,图像源只是这些变换的来源。

CMYK几乎总是与颜色配置文件一起使用(我的意思是正确的用例),否则颜色损失将是显着的。

在Photoshop中尝试转换:编辑 – >转换为配置文件。 与您的方式的主要区别 – 您可以选择目标CMYK配置文件和颜色管理引擎,包括Microsoft ICM,它可以给您不同的结果。

这是一篇关于CMYK的好文章: http : //www.northlight-images.co.uk/article_pages/colour_management/cmyk_for_photographers.html

至于编程……

也许使用一些专门的图像处理SDK会更容易。 色彩管理是其中任何一个的基本function,即使是免费也应该可用。

如果您需要估算实际打印RGB颜色的方式,则需要使用称为“软打样”的function。 这是RGB – > CMYK(带打印机配置文件) – > RGB转换。 在Photoshop中,您可以在此处查看:查看 – >校对颜色。 您可以使用SDK执行相同的操作。

可能是这个(未经测试的)片段有所帮助 – 它使用.NET api for ImageMagick 。

 MagickReadSettings settings = new MagickReadSettings(); settings.ColorSpace = ColorSpace.CMYK; using (MagickImage image = new MagickImage()) { image.AddProfile(ColorProfile.CMYK); image.Read("image_rgb.tiff", settings); image.Write("image_cmyk.tiff"); } 

如果你可以使用命令行,这也将完成工作:

 convert image_rgb.tiff -profile "RGB.icc" -profile "CMYK.icc" image_cmyk.tiff