Обнаружение пакета Ghostscript цвет

кажется, я не могу найти, Может ли Ghostscript просто определить, является ли задание цветом или оттенками серого. Я использую Ghostscript для преобразования заданий печати в PNG, но мне также нужна информация о цвете задания, поэтому мне не нужно искать его пиксель за пикселем снова.

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 pages without directly visible color

в предпечатной промышленности часто используются "богатые" черные или оттенки серого. Идиома "rich" черный или серый цвет используется для выражения того факта, что эти оттенки не сделаны из чисто черного тонера или чернил, но имеют смешанные компоненты цвета, чтобы сделать их более блестящими и более насыщенными.

теперь проверьте покрытие чернил каждой страницы:

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 является именно ожидаемым:

  • страницы 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.