我尝试使用Ghostscript(Windows上9.20)转换PDF文件(test.pdf,附后),仅使用Graylevel颜色空间(不是RGB或CMY):
gswin64c.exe -sDEVICE=pdfwrite -sProcessColorModel=DeviceGray -sColorConversionStrategy=Gray -dOverrideICC -dUseCIEColor -o gray.pdf -f test.pdf
结果确实只使用灰色:
>gswin64c.exe -o - -sDEVICE=inkcov gray.pdf
GPL Ghostscript 9.20 (2016-09-26)
Copyright (C) 2016 Artifex Software, Inc. All rights reserved.
This software comes with NO WARRANTY: see the file PUBLIC for details.
Processing pages 1 through 1.
Page 1
0.00000 0.00000 0.00000 0.92673 CMYK OK
(我需要使用-dUseCIEColor,否则CMY值> 0,这是一个我尚未解决的单独问题......)
我的问题:生成的gray.pdf使用与原始test.pdf明显不同的graylevels(在PDF查看器中打开并自行比较)。
是否有人看到我的错误或我应该做些什么来获得相同的PDF但是在灰度而不是RGB色彩空间?
非常感谢!
test.pdf:https://drive.google.com/open?id=0BzjatAIrG6P3S2F5Vng4cUhUS0U
gray.pdf:https://drive.google.com/open?id=0BzjatAIrG6P3cEtTY3JaaTJCS2c
答案 0 :(得分:1)
您正在进行多次转换,而根本不管理色彩空间转换。
首先,将原始颜色转换为基于CIE的颜色空间(并且空间根据原始空间中的组件数量而变化)。由于您没有指定Color Rendering Dictionaries,这是一个不受控制的转换,您使用的是默认值。
然后您开始从CIEBased进行另一次转换(通常不能用PDF表示,因此总是会导致额外的转换)到DeviceGray中。同样,您还没有为此转换提供任何ICC配置文件,因此您使用的是默认配置文件。
如果你坚持使用-dUseCIEColor(我非常强烈建议反对,控制这很难),那么你需要提供ColorRendering Dictionaries来控制从设备空间到CIE空间的转换,以及ICC配置文件来控制随后的从CIE空间转换为DeviceGray。
但是我强烈怀疑你不会使用-dUseCIEColor来获得更好的结果,就像Ghostscript告诉你的那样。
答案 1 :(得分:0)
我只能根据源文件猜测你需要什么。那个DeviceRGB
0.5 / 0.5 / 0.5填充矩形,我怀疑你希望它变成0.5 DeviceGray
。
以下解决方案和推测仅适用于此类和类似案例。 (例如,我不知道您撰写的" CMY值" 是什么,即文件中是否有DeviceCMYK
或ICC-based
或其他内容)。有简单的公式可以在设备颜色空间之间进行转换(参见 PDF参考),其中一个确实从DeviceRGB
中的相等值映射到DeviceGray
中的相同值。要使其有效,请使用GhostScript
9.10 :
"C:\Program Files\gs\gs9.10\bin\gswin32c.exe" -sDEVICE=pdfwrite -sProcessColorModel=DeviceGray -sColorConversionStrategy=Gray -dUseFastColor -o test_1.pdf -f test.pdf
请注意开关-dUseFastColor
。你得到"正确" 0.5灰度填充矩形。
要使其在版本 9.10 .. 9.20 (不包括两者)中运行,我必须添加另一个开关:-dPDFUseOldCMS
。同样,结果是0.5灰度填充矩形。
正如上一个开关名称所示,简单的事情可能被认为已弃用,看起来像是在 9.20 中被废弃。
相反,引入了新的精彩CMS引擎(因为 9.10 )。除此之外,它不适用于高级设备(包括pdfwrite
)。许多版本都关闭或破坏。
我无法在源代码和命令行选项中使用任何基于设备或ICC的颜色组合,以使其实际使用-sOutputICCProfile
选项,用于DeviceCMYK
或{ {1}}输出(或基于ICC的输出,无论如何)。生成的文件中的颜色值相同。
如果有人表示我错了,显示相反的例子,我会感激。
实际上(部分 - 仅限设备源颜色), 9.10 :
DeviceGray
使用不同的icc配置文件会产生不同的(并且看起来正确)输出。要将相等的RGB值转换为相同的灰度值,需要具有与(默认)"C:\Program Files\gs\gs9.10\bin\gswin32c.exe" -sDEVICE=pdfwrite -sProcessColorModel=DeviceGray -sColorConversionStrategy=Gray -sOutputICCProfile=sgray.icc -o test_2.pdf -f test.pdf
相同的伽玛的灰度轮廓。只是,使用免费sRGB
从ICC Profile Inspector
中提取曲线并将其导入例如sRGB
。 sgray.icc
(随Ghostscript
分发)。
使用配置文件将RGB转换为灰色,保留伽玛的优势,与简单的公式相对应"如上所述,可能或可能不值得努力。检查您的文件和目的。