Ghostscript颜色检测

时间:2012-09-06 11:57:02

标签: pdf colors png ghostscript grayscale

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

2 个答案:

答案 0 :(得分:18)

一个名为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 pages without directly visible color

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

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

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

同样,在成功的色彩转换的情况下,完全是预期的结果!

答案 1 :(得分:1)

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


在2011年之前,需要对文件进行栅格化以查看输出。由于PDF / PS是文件看起来像在栅格化时渲染的内容的描述。即使你可以使用ghostscipt执行此操作,我确信它需要首先光栅化/解释文件然后查看输出,所以如果你有png,你可以自己做,这将比处理更少的CPU密集度再次提交GS。