Ghostscript откриване на цвят

Изглежда не мога да намеря дали Ghostscript може просто да открие дали заданието е цветно или сиво. Използвам Ghostscript за конвертиране на задания за печат в PNG, но също така трябва да имам информация за цвета на заданието, така че да не се налага да го търся отново пиксел по пиксел.


person Matthew Lowe    schedule 06.09.2012    source източник


Отговори (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 за по-лесно показване в мрежата):

4 PDF страници без директно видим цвят

В предпечатната индустрия често се използват „богати“ черни или нюанси на сивото. Идиомът „богато“ черно или сиво се използва, за да изрази факта, че тези нюанси не са направени от чисто черен тонер или мастило, а имат смесени компоненти на цвета, за да изглеждат по-брилянтни и по-наситени.

Сега проверете покритието с мастило на всяка страница:

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

Отново точно очакваният резултат при успешно преобразуване на цветовете!

person Kurt Pfeifle    schedule 06.09.2012
comment
Това също е бърз начин, ако трябва да оцените покритието на тонера за файл за печат. - person Douglas Anderson; 25.04.2013
comment
В случай, че някой трябва да направи това в ruby, ето скъпоценен камък rubygems.org/gems/pdf_colored_pages, който извежда масив, съдържащ номерата на страниците (напр. 1,3,4) или диапазон от низ като '1,3-4', чрез анализиране на изхода от ghostscript inkcov. - person RedRoosterMobile; 26.05.2016

Ново изходно устройство направи този отговор остарял, вижте Приетия отговор.


До 2011 г. файлът трябваше да бъде растеризиран, за да се види резултат. Тъй като PDF/PS е описание на това как изглежда файлът, който се изобразява, докато е растеризиран. Дори ако можете да направите това с ghostscipt, сигурен съм, че ще трябва първо да растеризира/интерпретира файла, след което да погледне изхода, така че ако имате png, можете да го направите сами, което ще изисква по-малко процесорно натоварване от обработката на файл отново с GS.

person Mark Redman    schedule 06.09.2012
comment
...и съм почти сигурен, че твърдението ви не можете да направите това беше правилно до преди около година, но вече не е :-) --Така че, моля, изтрийте (или редактирайте) вашият отговор, преди да бъде гласуван против... :-) - person Kurt Pfeifle; 07.09.2012