11

我似乎无法找到 Ghostscript 是否能够简单地检测作业是彩色还是灰度。我使用 Ghostscript 将打印作业转换为 PNG,但我还需要有关作业颜色的信息,因此我不必再次逐个像素地搜索它。

4

2 回答 2

25

称为inkcov(您需要 Ghostscript v9.05 或更高版本)的(相对较新的)Ghostscript 设备可以可靠地检测 PDF 页面是否使用颜色。

它显示 CMYK 墨水的墨水覆盖率,分别针对每一页(对于 RGB 颜色,它在内部进行到 CMYK 颜色空间的静默转换)。

为了研究和演示它的功能,首先在 Ghostscript 的帮助下生成一个示例 PDF:

gs                                                                     \
  -o color-or-grayscale-test.pdf                                       \
  -sDEVICE=pdfwrite                                                    \
  -g5950x2105                                                          \
  -c "/F1 {10 80 moveto /Helvetica findfont 64 scalefont setfont} def" \
  -c "F1                         (100% 'pure' black)    show showpage" \
  -c "F1 .5 .5 .5   setrgbcolor  ( 50% 'rich' rgbgray)  show showpage" \
  -c "F1 .5 .5 .5 0 setcmykcolor ( 50% 'rich' cmykgray) show showpage" \
  -c "F1 .5         setgray      ( 50% 'pure' gray)     show showpage"

尽管在人眼看来,所有页面都没有使用任何颜色,但第 2 页和第 3 页确实将它们的明显灰度值与颜色混合在一起。但是没有一种颜色是直接可见的(除非您的显示器严重错误调整)。

查看生成的 PDF 页面(转换为 PNG 以便于通过网络显示):

4 个没有直接可见颜色的 PDF 页面

在印前行业,经常使用“丰富”的黑色或灰色阴影。成语“丰富的”黑色或灰色用于表示这些色调不是由纯黑色墨粉或墨水制成,而是混合了颜色成分,使它们看起来更鲜艳、更饱和。

现在检查每一页的墨水覆盖率:

gs  -o - -sDEVICE=inkcov color-or-grayscale-test.pdf
 [...]
 Page 1
  0.00000  0.00000  0.00000  0.05040 CMYK OK
 Page 2
  0.05401  0.05401  0.05401  0.05401 CMYK OK
 Page 3
  0.05799  0.05799  0.05799  0.00000 CMYK OK
 Page 4
  0.00000  0.00000  0.00000  0.04541 CMYK OK

(值 1.00000 对应于相应颜色通道的 100% 墨水覆盖率。因此0.05040,在结果的第一行中5.04 %,页面区域被黑色墨水覆盖。)因此 Ghostscript 给出的结果inkcov正是预期的结果:

  • 第 1 + 4 页不使用任何 C(青色)、M(洋红色)、Y(黄色)颜色,而仅使用 K(黑色)。
  • 第 2 + 3 页确实使用 C(青色)、M(洋红色)、Y(黄色)颜色的墨水,但根本没有使用 K(黑色)。

现在让我们转换原始 PDF 的所有页面以使用DeviceGray颜色空间:

gs                                \
  -o only-black-ink.pdf           \
  -sDEVICE=pdfwrite               \
  -dColorConversionStrategy=/Gray \
  -dProcessColorModel=/DeviceGray \
   color-or-grayscale-test.pdf

...并再次检查墨水覆盖率:

gs -q  -o - -sDEVICE=inkcov only-black-ink.pdf | grep -v Page
  0.00000  0.00000  0.00000  0.05040 CMYK OK
  0.00000  0.00000  0.00000  0.05401 CMYK OK
  0.00000  0.00000  0.00000  0.05799 CMYK OK
  0.00000  0.00000  0.00000  0.04541 CMYK OK

同样,在颜色转换成功的情况下,这正是预期的结果!

于 2012-09-06T22:20:32.763 回答
1

新的输出设备已使此答案过时,请参阅已接受的答案。


在 2011 年之前,需要对文件进行光栅化才能看到输出。由于 PDF/PS 是对文件外观的描述,该文件在光栅化时被渲染。即使您可以使用 ghostscipt 执行此操作,我确信它需要先光栅化/解释文件然后查看输出,因此如果您有 png 文件,您也可以自己执行此操作,这将比处理再次向 GS 提交文件。

于 2012-09-06T12:12:13.630 回答