【发布时间】:2015-01-12 06:33:07
【问题描述】:
我需要从 PDF 中获取用于渲染的 CMYK 值。
我认为它们是 C1 键下 0 - 1.0 范围内的值。
有谁知道如何获得它们?
【问题讨论】:
标签: c# colors ghostscript cmyk
我需要从 PDF 中获取用于渲染的 CMYK 值。
我认为它们是 C1 键下 0 - 1.0 范围内的值。
有谁知道如何获得它们?
【问题讨论】:
标签: c# colors ghostscript cmyk
CMYK 值与“C1”键无关。 可能有一个定义为 /C1 的色彩空间,但它不包含 CMYK 值。
对于那些不是设备空间的空间(即不是灰色, RGB 或 CMYK)颜色首先转换为设备空间之一。然后在 PDF 参考中定义了有关设备空间如何相互转换的规则。
对象的实际颜色分量将在对象的内容流中定义(对于页面或表单上下文中的矢量对象)或二进制数据(对于图像),或从函数计算(着色字典) .
为了找到其中任何一个,您需要阅读 PDF 文件,根据需要解压缩流,找到您想要获取信息的对象,然后确定当前的色彩空间。然后,您可以将定义对象的任何颜色空间中的颜色分量转换为 CMYK。
也许如果你解释了你的实际目标是什么,可能会更有帮助。
[更新]
您可以通过设置 ColorConversionStrategy=Gray 简单地使用 Ghostscript 创建一个新的灰度 PDF。
这样做的好处是可以处理 PDF 的所有元素,而不仅仅是图像。
您是否意识到 PDF 文件通常不仅仅包含光栅图像?可以有文本、线条、阴影,透明度组也可以定义为在给定的颜色空间中操作。这不是一项简单的任务。
如果您真的只处理图像,那么 ColorSpace 是在图像字典中定义的(它可能是间接引用)。您必须解析 PDF 文件(可能解压缩它)才能找到颜色空间定义。然后由图像数据给出每个分量的样本值。这些范围为 0-65535(取决于图像字典中的 BPC、1、2、4、8 或 16),您必须应用解码数组将值映射到适合颜色空间的范围内。
如果您想转换为灰度,则必须将转换应用到灰度。复杂空间将包括一种映射到设备空间的方法,设备空间之间的转换在 PDF 参考手册中有介绍。对于 ICCBased 空间,您将需要一个 ICC 颜色管理引擎,您可能想考虑 LCMS,或者您可以自己编写。
【讨论】: