首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ghostscript颜色检测

Ghostscript颜色检测
EN

Stack Overflow用户
提问于 2012-09-06 19:57:02
回答 2查看 10.7K关注 0票数 11

我似乎找不到Ghostscript是否能够简单地检测作业是彩色还是灰度。我使用Ghostscript将打印作业转换为PNG,但我还需要了解作业的颜色信息,这样我就不必再逐个像素地搜索它。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-09-07 06:20:33

名为inkcov的(相对较新的) Ghostscript设备(您需要Ghostscriptv9.05或更高版本)可以可靠地检测PDF页面是否使用颜色。

它分别为每个页面显示CMYK油墨的油墨覆盖率(对于RGB颜色,它在内部执行到CMYK颜色空间的静默转换)。

为了研究和演示它的功能,首先在Ghostscript的帮助下生成一个示例PDF:

代码语言:javascript
复制
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显示):

在印前行业,“丰富的”黑色或灰色阴影是经常使用的。成语“丰富的”黑色或灰色用来表达这样一个事实,即这些色调不是由纯粹的黑色碳粉或墨水制成的,而是混合了各种颜色成分,使它们看起来更鲜艳、更饱和。

现在检查每个页面的墨迹覆盖率:

代码语言:javascript
复制
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给出的结果恰好是预期的结果:

  • pages 1+4不使用C(青色)、M(洋红)和Y(黄色)中的任何一种颜色,但只有K (black).
  • pages 2+3使用C(青色)、M(洋红)和Y(黄色)颜色的墨水,但根本不使用K(黑色)。

现在,让我们转换所有页面的原始PDF使用DeviceGray色彩空间:

代码语言:javascript
复制
gs                                \
  -o only-black-ink.pdf           \
  -sDEVICE=pdfwrite               \
  -dColorConversionStrategy=/Gray \
  -dProcessColorModel=/DeviceGray \
   color-or-grayscale-test.pdf

...and再次检查油墨覆盖率:

代码语言:javascript
复制
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

同样,在颜色转换成功的情况下,完全符合预期的结果!

票数 25
EN

Stack Overflow用户

发布于 2012-09-06 20:12:14

新的输出设备已使此答案过期,请参阅接受的答案。

在2011年之前,需要对文件进行光栅化才能看到输出。由于PDF/PS是对文件外观的描述,因此在光栅化的同时进行渲染。即使你可以用ghostscipt来做这件事,我相信它也需要首先对文件进行光栅化/解释,然后再查看输出,所以如果你有png,你也可以自己做这件事,这将比使用GS再次处理文件占用的cpu更少。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12299574

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档