Изглежда не мога да намеря дали Ghostscript може просто да открие дали заданието е цветно или сиво. Използвам Ghostscript за конвертиране на задания за печат в PNG, но също така трябва да имам информация за цвета на заданието, така че да не се налага да го търся отново пиксел по пиксел.
Ghostscript откриване на цвят
Отговори (2)
(Сравнително ново) Ghostscript устройство, наречено inkcov
(имате нужда от Ghostscript v9.05 или по-нов), може надеждно да открие дали една PDF страница използва цвят или не.
Той показва покритието на мастилото за CMYK мастилата, отделно за всяка отделна страница (за RGB цветове, извършва безшумно преобразуване в CMYK цветово пространство вътрешно).
За да проучите и демонстрирате неговите функции, първо генерирайте примерен PDF с помощта на Ghostscript:
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% покритие с мастило за съответния цветен канал. Така че 0.05040
в първия ред на резултата означава, че 5.04 %
от областта на страницата е покрита с черно мастило.) Следователно резултатът, даден от inkcov
на Ghostscript, е точно очакваният едно:
- страници 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.