使用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的评论,我认为,我有一些理解颜色概念的基本问题! (如果我错了,请纠正我)
对于任何颜色,我们有不同的颜色模型, RGB
, CMYK
,…
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