rgb转换为cmyk颜色空间的举例
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了rgb转换为cmyk颜色空间的举例相关的知识,希望对你有一定的参考价值。
参考技术A rgb转换为cmyk颜色空间的举例:RGB个CMYK是两个不同的颜色系统,常用与描述设备的属性,RGB一般为输入设备、显示设备的设备值,CMYK则为输出设备(打印机、印刷机)值。
我们工作中,经常会用到RGB-CMYK的转换,如将RGB的图片转换成CMYK,这在打印/印刷中为“分色”,我们不可能人为去进行这样的分色操作。
SO及颜色相关体系中,也没有针对RGB-CMYK之间的转换有一个固定的关系和公式,其实很好理解。
比如RGB(125,125,125)的一个灰色,发送至EPSON打印机上解析后CMYK(50,40,40,0),发送至CANON打印机上解析后的CMYK为(40,30,30,15),更何况打印所使用的软件可能不同,所以无法固定的将RGB转换成CMYK。
Ghostscript 将 cmyk-PDF 转换为 rgb-PNG 并保留正确的颜色
【中文标题】Ghostscript 将 cmyk-PDF 转换为 rgb-PNG 并保留正确的颜色【英文标题】:Ghostscript convert cmyk-PDF to rgb-PNG and preserving correct colors 【发布时间】:2020-07-15 12:22:45 【问题描述】:我想使用 ghostscript 将 CMYK-PDF 转换为 rgb-PNG。
这是我目前使用的:
gs -sDEVICE=pngalpha -dBATCH -dNOPAUSE -dCompatibilityLevel=1.4 -dColorConversionStrategy=/sRGB -dProcessColorModel=/DeviceRGB -dUseCIEColor=true -sOutputFile=out.png -r300 pdf/input.pdf
但问题是颜色转换不准确。我使用的是 Mac OS Catalina MacBook,当我在内置预览工具中查看原始 PDF 时,颜色不像转换后的颜色那么饱和。
所以我的问题是我做错了什么?我不是色彩管理方面的专家。
谢谢!
【问题讨论】:
【参考方案1】:嗯,很明显,颜色不可能“相同”,因为一种以减色 4 色模型表示,另一种以加色 3 色模型表示。
首先,您使用了三个命令行开关,它们根本不会产生任何影响:
-dCompatibilityLevel
仅用于pdfwrite设备设置PDF支持的最高版本,对其他设备没有影响,当然也不会影响PNG输出设备。
-sColorConversionStrategy
仅适用于 pdfwrite 设备,它能够处理几乎所有颜色模型。大多数设备,例如PNG只支持单一颜色模型,所以你不需要指定颜色转换,它都必须转换为那个颜色空间。
你不应该设置-dProcessColorModel
。对于设备来说,这必须保持正确;在高级设备的情况下,它会被忽略,或适当地设置为与 ColorConversionStrategy 相同。
最后也是最重要的;你已经设置了-dUseCIEColor
。这是一个古老的 PostScript 颜色管理控件;它使所有颜色都转换为 CIE 空间,CIEBasedA、CIEBasedABC、CIEBasedDEF 或 CIEBasedDEFG。从那里颜色转换为目标空间。使用它几乎会破坏 Ghostscript 中的 ICC 配置文件颜色管理。
所以放弃所有这四个,然后再试一次。请注意,当您将 PNG 结果与 PDF 进行比较时,您是在将 Ghostscript 执行的颜色转换与 PDF 使用者执行的颜色转换 (CMYK->RGB) 进行比较,大概是内置的 Mac Quartz 代码。我不得不对转换的质量表示一些保留意见。
您完全可以控制 Ghostscript 执行的颜色管理。有默认的 RGB 和 CMYK 配置文件用于将 CMYK 组件转换为 CIE XYZ 校准空间,然后从那里转换为 RGB。这些中的每一个都用于 ICC 配置文件。如果您不喜欢默认的,您可以用您选择的另一个替换其中一个或两个。 ICC 配置文件可以在 ghostpdl/iccprofiles 目录中找到,您可以使用 -sDefaultCMYKProfile=<...path...>
指定用于将 CMYK 转换为 CIE-XYZ 的不同配置文件和 -sOutputICCProfile=<...path...>
指定用于最终空间的不同 ICC 配置文件( RGB 在你的情况下)。
对于正确管理颜色的工作流程,您应该知道指定输入颜色模型(例如 SWOP CMYK)的特征,并使用正确的 ICC 配置文件从 CMYK 映射到 CIE-XYZ,并且您应该知道输出颜色模型的特征(例如 Sony Trinitron,使用旧显示器示例)来创建最匹配的输出颜色。
您可能有显示器的 ICC 配置文件,我怀疑您知道原始 PDF 文件中的 CMYK 值代表什么。要匹配您使用的任何 PDF 使用者,您需要知道它使用的 CMYK 和 RGB 输出配置文件,并在 Ghostscript 渲染过程中使用相同的配置文件。
请注意,以上所有内容均假定未提供的原始 PDF 实际上以 CMYK 指定颜色,而不是在基于 ICC 的颜色空间或其他类似的与设备无关的颜色空间中。
编辑
来自评论:
根据你的论证,它应该是相同的
没有。对于 PDF 消费者,它正在执行 CMYK->RGB 转换以显示内容。当渲染为 PNG 时,Ghostscript 也在进行 CMYK->RGB 转换。实际上,因为您使用的是-dUseCIEColor
,所以它正在执行 CMYK->CIEBasedDEFG->RGB 转换,但假设您放弃了它,所以它只是在执行 CMYK->RGB。
现在,如果这两个转换是完全色彩管理的,我们现在假设 ICC 配置文件作为颜色管理技术,并且两个转换使用 相同 ICC 配置文件,即假设相同的特征空间,那么是的,结果将是相同的。
没有看到您的 PDF 文件,我无法判断其中的颜色是如何实际指定的。您说它们是“CMYK”,但 CMYK 不是特征空间。有许多不同的 CMYK 墨水,它们被打印到具有不同反射率和吸收率的许多不同类型的纸张上。所以SWOP和Euroscale都是CMYK印刷工艺,但它们的特点不同。
因此,如果我们将您的 CMYK 值视为 SWOP 并将它们转换为 RGB 空间,我们应该期望不同的 RGB 值,而不是那些相同的 CMYK 值,就好像它们是 Euroscale 一样。这是因为打印到 SWOP 流程的相同 CMYK 四边形将与 Euroscale 流程上的外观不同。
在创建 RGB 值时也是如此。 RGB 也不是一个特征空间,有许多不同的 RGB 输出设备,它们在显示给定 RGB 三元组的方式上有所不同。
现在我不知道您的 PDF 用户如何进行 CMYK->RGB 转换。我想它使用 ICC 配置文件来表征空间,但它可能不会。 PostScript 语言参考中有一个长期存在的(快速而肮脏的)转换方法,它可能会使用它。
但是,现代色彩管理工作流程将使用 ICC 配置文件。
在处理“CMYK”或“RGB”等非特征空间时,Ghostscript 唯一能做的就是使用通用配置文件。它使用通用 CMYK 配置文件将传入的 CMYK 转换为 CIE XYZ 空间(与设备无关),然后使用通用 RGB 配置文件将 CIE XYZ 组件转换为 RGB。您可以更改有关输入和输出颜色空间的假设。
实际上,您可以说“我碰巧知道 CMYK 值是为 HP Indigo 设计的,所以请使用 HP Indigo ICC 配置文件”,然后将 CMYK 映射到原始创建者所期望的 XYZ。同样,您可以说“我正在使用 Sony 广色域 RGB 显示器,所以请使用该 ICC 配置文件”,这将在该设备上提供 XYZ 颜色的最佳表现。
但如果明天您在低端饭山显示器上查看它,您可以告诉它使用不同的适当配置文件,并且您会(尽可能)看到与昂贵设备上相同的颜色。
所以试着总结一下;问题是您使用的是未表征的空格。这两个消费者未设置为使用相同的默认颜色管理路径,因此您可以看到差异。为避免这种情况,您需要在两个 PDF 使用者(预览版和 Ghostscript)上使用相同的配置文件。
我不记得 PNG 是否允许您在文件中保存 ICC 配置文件。如果是这样,那么您可以将 PNG 带到另一台具有不同显示器的计算机上,它看起来仍然相同。如果不是(我认为不是),那么在不同的显示器上查看 RGB 输出看起来会有所不同。
【讨论】:
非常感谢您的详尽回答。但是有一个问题:我的屏幕在呈现 PDF 时显示 rgb-colors。在同一查看器中渲染 PNG 时,它还会显示 rgb 颜色。那为什么会有区别呢?根据您的论证,它应该是相同的。 这个答案导致了一个正确的解决方案,也很有教育意义。因此,我认为这是一个适当的解决方案。谢谢你,ICC天才:) 遗憾的是,我的 ICC 知识不是那么好,我的同事 Vrhel 博士比我了解更多,但我知道一点,我很高兴你能达到解决方案!以上是关于rgb转换为cmyk颜色空间的举例的主要内容,如果未能解决你的问题,请参考以下文章