关于c#:使用ICC配置文件将RGB转换为CMYK

您所在的位置:网站首页 fiery服务器色彩管理ICC文件 关于c#:使用ICC配置文件将RGB转换为CMYK

关于c#:使用ICC配置文件将RGB转换为CMYK

2024-07-13 04:21| 来源: 网络整理| 查看: 265

我准备将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色彩系统(WCS)

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

结果如下:

个人资料:CoatedFOGRA27.icc

原始颜色:#2f00ff

转换后的颜色:#2032FF

Photoshop:#3b4996

JSFiddle进行比较

编辑

根据科多的评论,我认为,我在理解颜色概念方面存在一些基本问题! (如果我错了,请纠正我)

对于任何颜色,我们都有不同的颜色模型,RGB,CMYK,...

RGB显示(Red Green Blue)生成颜色和CMYK(Cyan Magenta Yellow *)的组合。这些模型的值可以轻松地相互转换。

例如 :

RGB十六进制:#2f00ff

RGB:47 - 0 - 255

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

几乎所有监视器都使用RGB来显示颜色。打印的颜色(由于使用墨水而不是LED o ...)与您在监视器/上看到的颜色完全不同

为此,Photoshop之类的图像编辑器使用CMYK **MODE**。在此模式下,如果选择RGB颜色,则编辑器会将其转换为打印后看到的颜色并将其显示为屏幕。这种转换完全取决于颜色个人资料(此处为ICC)

编辑2

相关讨论 所有这些颜色值中的哪一个应该是CMYK值?如果目标似乎是不支持CMYK的HTML,为什么还要尝试转换为CMYK? @Codo,故事是:最终用户选择RGB颜色,Im使用HEX将颜色传递给服务器。在回发中,我想显示他选择的converted-to-CMYK颜色!在Photoshop中,设置Mode > CMYK并选择并填充#2f00ff时,结果为#3b4996。 我不理解(我没有安装Photoshop)。您的颜色值(#xxxxxx)应该是多少?在我看来,它们都像RGB值。 CMYK值在哪里? @Codo请重新检查问题[编辑段] 我仍然不明白你要达到什么目标。您能否更好地描述您在做什么,期望得到什么以及您实际上得到了什么。我希望您同时需要RGB到CMYK以及CMYK到RGB转换。但是我看不到CMYK到RGB的转换。 亲爱的@Codo,感谢您的耐心等待,请检查edit2。

让我尝试帮助您解决所有问题:

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

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

这两个是唯一可以为您提供数字精确色彩的色彩, 您可以将它们视为颜色的数字表示形式或真实的DNA,并感谢上帝,监视器能够显示它们-正是它们的本质。

让我们继续:

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

红色RGB的值为54,81,70,但是(255,0,0).. 54,81,70也可以应用于其他RGB。(254,0,0)

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

4)CYMK旨在告诉打印机将青色,黄色和洋红色混合到纸张上的颜色是什么,将K(键或黑色)混合到纸上的深度是多少。

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

让我们继续:

您的工作是将显示器中显示的RGB调整为打印机的CMYK。 上帝知道为什么当它是全自动的并且由驾驶员操纵多年后,为什么要这样做。. 但是我想你有你的理由,所以让我们继续, 每台打印机的CMYK值都略有不同,可以混合以达到特定的红色。

这就是ICC配置文件生效的地方。 他们通过提供(1)原始RGB-RED的表格来提供RED的标准 (2)特定打印机中的CMYK红色。

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

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

这是因为数字色彩分辨率比结果要准确得多。 打印纸,另一种查看方式是说特定的打印机ICC可以在Lab上构建。

现在我知道了..我知道..您可能已经知道了大部分(如果不是全部)。 (我写它只是为了确保我们都在书的同一页上。)

因此,当您说"没有一个返回正确的值"时 (假设它们=转化)您是什么意思? 一切对我来说都是正确的,因为实际上它们确实返回了正确的值-用于打印目的。

相关讨论 亲爱的GV:哇!我试图建立一个印刷服务网站。客户端从颜色选择器中选择RGB-RED作为纸张背景。他希望提供与所选颜色相同的RED。为此,我们将RGB-RED颜色发布到服务器并将其转换为具有特定ICC的CMYK (根据我的解决方案),然后回寄给客户,并替换为他的RGB-RED,并提醒他注意新的颜色!现在的问题是:Project Owner开始执行此过程,然后单击PrintSCR并再次使用Photoshop进行操作以比较转换后的颜色!不幸的是结果不相等。 好的,现在好多了:),所以当您的客户选择该纸张背景色时,他选择了RGB,并且您想根据特定的ICC配置文件将其转换为cmyk。一切都好..只是一件事..谁说photoshop对CMYK的解释是正确的?我们已经建立了一个CMYK红色,其中可以包含许多RGB红色。那么,究竟是谁说挑选出来的一个Photoshop是最好的呢?即:在photoshop拾色器中,选择rgb(186,72,190)->和printScr,现在打开paint.Net并在其拾色器中对该颜色进行采样,然后p.net显示rgb(186,71,190)。PS完全错误。 说服Product Owners您的引擎比Porsche更好!不可能;)我找到了Adobe Color Management。我在做这个工作.... 令人兴奋的:P Adob??e最终理解,由于颜色范围的差异,转换中存在自然的变化,因此Adobe在其色彩管理模块中存在故障。.因此,它试图将其模块建立为转换的行业标准。 ,它将为您解决问题:) 不,最绝对也绝对不! RGB不是数字绝对或准确的颜色,相反。您对R255 G0 B0三元组的实际红色一无所知,仅表示它通常被认为是某种红色。 RGB三联体只有与描述您实际指代的色彩空间的色彩配置文件一起使用时才具有任何意义。 关于OP的问题:忘记Photoshop,在此业务中没有发言权。如果您使用一台特定的印刷机工作,并且您拥有使用的确切印刷过程的实际且准确的颜色配置文件(包括技术,纸材,其他所有东西,请不要忘记必须定期重新创建配置文件),那么您可能使用此颜色配置文件进行转换,但很可能不是。 [...] daccess-ods.un.org daccess-ods.un.org RGB无法可靠地转换为CMYK,并无法在您描述的上下文中转换。如果最终用户必须提供要打印的特定颜色,则要么让他们以CMYK提供颜色(由于技术和打印材料的差异仍不够精确),或者准确地说,仅使用Pantone专色。不幸的是,其他任何事情都会误导您的客户。

就我所见,理论……

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可能会更容易。颜色管理是其中任何一个的基本功能,甚至应该免费提供。

如果您需要估算RGB颜色的实际打印方式,则需要使用"软打样"功能。这是RGB-> CMYK(带有打印机配置文件)-> RGB转换。在Photoshop中,您可以在此处进行检查:"视图"->"校样颜色"。您可以使用SDK执行相同的操作。

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

12345678MagickReadSettings 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"); }

如果您可以使用命令行,那么也可以完成以下工作:

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

相关讨论 该解决方案挽救了我的生命!直到开发截止日期的2个小时,我开始担心。我花了几天的时间尝试在C#中将RGB转换为CMYK,然后找到了这个解决方案,它在几分钟之内就起作用了。谢谢!



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3