我似乎无法找到的Ghostscript是否能够简单地检测作业是否是彩色或灰度。 我使用Ghostscript的打印作业,以PNG的转换,但我也需要有对工作的颜色信息,所以我没有通过像素再次搜索它的像素。
Answer 1:
所谓A(比较新)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更容易显示):
在印前行业,经常使用的“富二代”黑色或灰色的阴影。 成语“富人”黑色或灰色是用来表达一个事实,即这些阴影不是从单纯的黑色碳粉或墨水制成,但有颜色的混合式组件,以使它们显得更加辉煌,更加饱和。
现在检查每个页面的油墨覆盖率:
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
(用于各个颜色信道A的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
同样,正是预期的结果在成功的颜色转换的情况下!
Answer 2:
新的输出设备已使这个答案已经过时,见接受的答案。
直到2011年,该文件需要被光栅化成看到的输出。 由于PDF / PS是什么样的文件看起来像其光栅化的同时获取呈现容貌的描述。 即使你能做到这一点与ghostscipt我相信这将需要光栅化/解释文件第一次,然后查看输出,所以如果你有PNG的你还不如自己做,这将是较少CPU处理密集与GS再次文件。