Ghostscript将cmyk PDF转换为rgb PNG并保留正确的颜色

Ghostscript将cmyk PDF转换为rgb PNG并保留正确的颜色,pdf,png,ghostscript,Pdf,Png,Ghostscript,我想使用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 但问题是颜色转换不准确。我使用的

我想使用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时,颜色不像转换后的颜色那样饱和

所以我的问题是我做错了什么?我不是色彩管理专家


谢谢

显然,颜色不可能是“相同”的,因为一种是用减法四色模型表示的,另一种是用加法三色模型表示的

首先,您使用的三个命令行开关根本不会产生任何效果:

-dCompatibilityLevel
仅用于pdfwrite设备设置PDF支持的最大版本,它对任何其他设备都没有影响,当然也不会影响PNG输出设备

-sColorConversionStrategy
仅适用于pdfwrite设备,该设备能够处理几乎所有颜色型号。大多数设备(如PNG)只支持单一颜色模型,因此不需要指定颜色转换,所有设备都必须转换到该颜色空间

永远不要设置
-dProcessColorModel
。必须保持设备的正确性;对于高级设备,它将被忽略,或适当地设置为与ColorConversionStrategy相同

最后也是最重要的;您已经设置了
-dusececolor
。这是一个古老的附言色彩管理控件;它使所有颜色转换为CIE空间,CIEBASEDEA、CIEBASEDBC、CIEBASEDEF或CIEBASEDEFG。从那里,颜色被转换为目标空间。使用它将在很大程度上破坏Ghostscript中的ICC配置文件颜色管理

所以,放下这四个,再试一次。请注意,当您将PNG结果与PDF进行比较时,您正在将Ghostscript执行的颜色转换与PDF使用者执行的颜色转换(CMYK->RGB)进行比较,可能是内置的Mac Quartz代码。我不得不对转换的质量表示一些保留意见

您完全可以控制由Ghostscript执行的颜色管理。有默认RGB和CMYK配置文件,用于将CMYK组件转换为CIE XYZ校准空间,然后从该空间转换为RGB。在ICC配置文件中,每一项都有其用途。如果你不喜欢默认的,你可以选择另一个来代替其中一个或两个。ICC配置文件可在ghostpdl/ICCProfile目录中找到,您可以使用
-sDefaultCMYKProfile=
指定用于将CMYK转换为CIE-XYZ的不同配置文件,并使用
-soutputicprofile=
指定用于最终空间的不同ICC配置文件(在您的情况下为RGB)

对于正确的颜色管理工作流程,您应该知道指定输入颜色模型(如SWOP CMYK)的特征,并使用正确的ICC配置文件从CMYK映射到CIE-XYZ,您应该知道输出颜色模型的特征(如索尼Trinitron,使用旧显示器示例)创建最匹配的输出颜色

您的显示器可能有ICC配置文件,我怀疑您是否知道原始PDF文件中的CMYK值代表什么。要匹配您使用的任何PDF使用者,您需要知道它使用的是什么CMYK和RGB输出配置文件,并在Ghostscript渲染过程中使用相同的配置文件

注:以上所有内容均假设未提供的原始PDF实际上以CMYK指定颜色,而不是在基于ICC的颜色空间或其他类似的独立于设备的颜色空间中

编辑 从评论中可以看出:

根据你的论证,它应该是相同的

否。对于PDF使用者,它正在进行CMYK->RGB转换以显示内容。渲染为PNG时,Ghostscript也在执行CMYK->RGB转换。实际上,因为您使用的是
-dusecolor
它正在进行CMYK->Ciebasedefg->RGB转换,但假设您放弃了它,所以它只是在进行CMYK->RGB转换

现在,如果这两个转换是完全颜色管理的,那么现在让我们假设ICC配置文件是颜色管理技术,并且这两个转换使用相同的ICC配置文件,即假设相同的特征空间,那么是的,结果将是相同的

如果看不到你的PDF文件,我就说不出里面的颜色是如何指定的。你说它们是“CMYK”,但CMYK不是一个特征化的空间。有许多不同的CMYK油墨,它们被印刷到许多不同种类的纸张上,具有不同的反射率和吸收性。所以SWOP和Euroscale都是CMYK印刷工艺,但它们的特点不同

因此,如果我们将您的CMYK值视为SWOP,并将其转换为RGB空间,那么我们应该期望得到不同的RGB值,而不是将相同的CMYK值视为Euroscale。这是因为同一个CMYK四元打印到SWOP过程将不同于欧洲规模的过程中的外观

同样,在创建RGB值时。RGB也不是一个特征空间,有许多不同的RGB输出设备,它们在显示给定RGB三元组的方式上有所不同

现在我不知道你的PDF用户是如何进行CMYK->RGB转换的。我想它会使用ICC配置文件来描述空间,但可能不会。PostScript语言引用中有一种长期存在的(快速而肮脏的)转换方法,它可能会使用这种方法

然而,现代颜色管理工作流将使用ICC配置文件

当处理诸如“CMYK”或“RGB”之类的非特征空间时,Ghostscript唯一能做的就是使用通用配置文件。它使用通用CMYK配置文件