2012-09-06 186 views
10

我似乎無法找到Ghostscript是否能夠簡單地檢測作業是彩色還是灰度。我使用Ghostscript將打印作業轉換爲PNG,但我也需要了解有關作業顏色的信息,因此我不必再次逐個像素地搜索它。Ghostscript顏色檢測

回答

16

一個名爲inkcov(您需要Ghostscript v9.05或更新版本)的(相對較新的)Ghostscript設備可以可靠地檢測PDF頁面是否使用顏色。

它爲每個單獨頁面(對於RGB顏色,它在內部靜默轉換爲CMYK顏色空間)分別顯示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更容易顯示):

4 PDF pages without directly visible color

印前行業,經常使用的「富二代」黑色或灰色的陰影。成語「豐富」的黑色或灰色用來表達這樣的事實,即這些色調不是由純粹的黑色墨粉或墨水製成的,而是具有混合的色彩成分,以使它們看起來更加明亮和飽和。

現在檢查每個頁面的油墨覆蓋率:

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%的油墨覆蓋的各顏色通道A的值,所以在結果的第一行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 

同樣,正是預期的結果在成功的顏色轉換的情況下!

+0

如果你需要估算打印文件的碳粉覆蓋率,這也是一種快速的方法。 –

+0

如果有人需要在ruby中做到這一點,這裏是一個gem https://rubygems.org/gems/pdf_colored_pa​​ges輸出一個包含頁碼(例如1,3,4)或範圍字符串像'1,3 -4',通過解析ghostscript inkcov輸出。 – RedRoosterMobile

1

新的輸出設備已將此答案過期,請參閱「接受的答案」。


直到2011年,文件需要被柵格化以查看輸出。由於PDF/PS是文件外觀的描述,它在光柵化的同時呈現。即使你可以用ghostscipt做到這一點,我相信它需要首先柵格化/解釋文件,然後看看輸出,所以如果你有png的話,你可以自己做這個,這將比處理與GS再次文件。

+0

......我很確定你的陳述*「你不能這樣做」*在大約一年前是正確的,但它不再是:-) - 所以請刪除(或編輯)你的答案,在它被下調之前...... :-) –