我似乎找不到Ghostscript是否能够简单地检测作业是彩色还是灰度。我使用Ghostscript将打印作业转换为PNG,但我还需要了解作业的颜色信息,这样我就不必再逐个像素地搜索它。
发布于 2012-09-07 06:20:33
名为inkcov的(相对较新的) Ghostscript设备(您需要Ghostscriptv9.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...and再次检查油墨覆盖率:
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-06 20:12:14
新的输出设备已使此答案过期,请参阅接受的答案。
在2011年之前,需要对文件进行光栅化才能看到输出。由于PDF/PS是对文件外观的描述,因此在光栅化的同时进行渲染。即使你可以用ghostscipt来做这件事,我相信它也需要首先对文件进行光栅化/解释,然后再查看输出,所以如果你有png,你也可以自己做这件事,这将比使用GS再次处理文件占用的cpu更少。
https://stackoverflow.com/questions/12299574
复制相似问题