我似乎無法找到Ghostscript是否能夠簡單地檢測作業是彩色還是灰度。我使用Ghostscript將打印作業轉換爲PNG,但我也需要了解有關作業顏色的信息,因此我不必再次逐個像素地搜索它。Ghostscript顏色檢測
回答
一個名爲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更容易顯示):
印前行業,經常使用的「富二代」黑色或灰色的陰影。成語「豐富」的黑色或灰色用來表達這樣的事實,即這些色調不是由純粹的黑色墨粉或墨水製成的,而是具有混合的色彩成分,以使它們看起來更加明亮和飽和。
現在檢查每個頁面的油墨覆蓋率:
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
同樣,正是預期的結果在成功的顏色轉換的情況下!
新的輸出設備已將此答案過期,請參閱「接受的答案」。
直到2011年,文件需要被柵格化以查看輸出。由於PDF/PS是文件外觀的描述,它在光柵化的同時呈現。即使你可以用ghostscipt做到這一點,我相信它需要首先柵格化/解釋文件,然後看看輸出,所以如果你有png的話,你可以自己做這個,這將比處理與GS再次文件。
......我很確定你的陳述*「你不能這樣做」*在大約一年前是正確的,但它不再是:-) - 所以請刪除(或編輯)你的答案,在它被下調之前...... :-) –
- 1. Java顏色檢測
- 2. 檢測iDevice顏色
- 3. 硒 - 檢測顏色
- 4. Java顏色檢測
- 5. 顏色SURF檢測器
- 6. PHP顏色強度檢測
- 7. 碰撞檢測顏色
- 8. C#aforge顏色檢測
- 9. opencv中的顏色檢測
- 10. 顏色檢測算法
- 11. 檢測精靈的顏色
- 12. 顏色邊緣檢測+ opencv
- 13. 顏色檢測和分析
- 14. Opencv Android顏色檢測
- 15. OpenCV顏色檢測爲黃色
- 16. Java:檢測顏色(例如,我的顏色是藍色的嗎?)
- 17. 從物體中檢測顏色並更改其顏色ios
- 18. OpenCV - 具有不同顏色的顏色斑點檢測器
- 19. 使用YCrCb顏色空間進行顏色檢測?
- 20. 使用javascript檢測顏色是否在兩種顏色之間
- 21. 褪色的ghostscript
- 22. 顏色檢測後發生事件
- 23. C#顏色檢測多個結果
- 24. 如何從PDF中檢測顏色Python
- 25. Python中的RGB顏色檢測語言
- 26. AS3中的顏色檢測可能嗎?
- 27. 檢測iPhone/iPad/iPod touch的顏色?
- 28. 檢測字符串內的IRC顏色
- 29. 檢測如果顏色是在範圍
- 30. 檢測圖像中的顏色斑點
如果你需要估算打印文件的碳粉覆蓋率,這也是一種快速的方法。 –
如果有人需要在ruby中做到這一點,這裏是一個gem https://rubygems.org/gems/pdf_colored_pages輸出一個包含頁碼(例如1,3,4)或範圍字符串像'1,3 -4',通過解析ghostscript inkcov輸出。 – RedRoosterMobile