我似乎无法确定Ghostscript是否能够简单地检测作业是彩色还是灰度。我使用Ghostscript将打印作业转换为PNG,但我还需要有关于作业颜色的信息,所以我不必再次逐个像素地搜索它。
答案 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以便于通过网络显示):
在印前行业,经常使用“丰富”的黑色或灰色阴影。成语“丰富”的黑色或灰色用于表示这些色调不是由纯黑色墨粉或墨水制成,而是具有混合颜色成分,使它们看起来更加明亮和饱和。
现在检查每个页面的墨水覆盖率:
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
给出的结果正是预期的结果:
现在让我们将原始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。