Mat*_*owe 10 pdf png colors ghostscript grayscale
我似乎无法找到Ghostscript是否能够简单地检测作业是彩色还是灰度.我使用Ghostscript将打印作业转换为PNG,但我还需要有关于作业颜色的信息,所以我不必再次逐像素地搜索它.
Kur*_*fle 20
一个(相对较新的)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"
Run Code Online (Sandbox Code Playgroud)
虽然所有页面在人眼看来根本不使用任何颜色,但第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
Run Code Online (Sandbox Code Playgroud)
(值为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
Run Code Online (Sandbox Code Playgroud)
...并再次检查墨水覆盖范围:
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
Run Code Online (Sandbox Code Playgroud)
再次,在成功的颜色转换的情况下,完全是预期的结果!