我似乎找不到Ghostscript是否能够简单地检测作业是彩色还是灰度的信息。我使用Ghostscript将打印作业转换为PNG,但我也需要有关作业颜色的信息,这样我就不必再逐像素搜索它。
我似乎找不到Ghostscript是否能够简单地检测作业是彩色还是灰度的信息。我使用Ghostscript将打印作业转换为PNG,但我也需要有关作业颜色的信息,这样我就不必再逐像素搜索它。
一种相对较新的Ghostscript设备名为inkcov
(需要Ghostscript v9.05或更新版本),可以可靠地检测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以便通过Web更轻松地显示):
在印前行业中,经常使用“丰富”的黑色或灰色。这个说法用于表达这些阴影不是由纯黑色调色剂或油墨制成的,而是混有颜色成分,使它们看起来更加明亮和饱和。
现在检查每个页面的油墨覆盖范围:
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
再次强调,如果颜色转换成功,则会得到预期的结果!
直到2011年,需要将文件光栅化才能看到输出。由于PDF/PS是描述文件外观的说明,它在被光栅化时会呈现出来。即使你可以使用Ghostscript做到这一点,我相信它仍然需要先对文件进行光栅化/解释,然后再查看输出,因此如果您有png文件,您最好自己这样做,这比再次使用GS处理文件少了cpu负担。