检测PostScript文件中的颜色

时间:2018-06-06 05:05:56

标签: postscript

我需要确定postcript文件是以彩色还是黑白方式发送到打印机。虽然有很多解决方案,但它们似乎主要需要渲染文档,然后使用ghostscript单独检查每个页面,这对于较大的文档来说可能有点慢。我想知道下面的grep是否会给我相同的信息或是否有其他类型的颜色缺失?

grep 'setrgbcolor\|setcymkcolor\|colorimage' foo.prn

1 个答案:

答案 0 :(得分:1)

您在PostScript中可用的全部色彩空间方面还有很长的路要走。你没有setcolorspace,而setcolorspace需要一个复杂的参数数组,包括/ DeviceGray(所以不是颜色)。

你也不考虑CIEBasedA,也不考虑C = M = Y = 0,K是灰度,即使它用CMYK空间表示,当然R = G = B是灰色阴影RGB空间。同样地/分离/黑色会画成灰色阴影。

此外,PostScript是一种编程语言;它通常包括一个prolog,它以一种方便PostScript生成应用程序作者的方式定义操作。该序言可以包括在该特定程序中未使用的功能。如下所示:

/rg /setrgbcolor load def

会触发你的grep,即使PostScript程序没有使用rg

然后有图像。 colorimage不是在PostScript中绘制图像的唯一方法,image运算符采用字典操作数,并且可以包含颜色空间。如上所述,可能会在不同的色彩空间中显示灰色图像(效率低,可能合法)。

您可以编写一个PostScript程序,它“挂钩”颜色运算符的定义并让代码询问参数以确定规范是否为灰色空间,图像更难处理,因为,如果您需要可靠性,你需要查看图像样本数据,看看它实际上只是一个灰色图像。

可以编写一个Ghostscript设备来完成这项工作,因为它将接收所有操作。它仍然不会完全快,因为它必须解释整个文件以检测每个操作。即使这样,这种工具也可能在特定应用中失败。例如,如果设备颜色空间为灰色,RGB或CMYK,则代码可以询问底层设备并采用不同的代码路径。但这在任何现实世界的PostScript程序中都不太可能发生。