Распознавание цвета Ghostscript

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

Ответ 1

A (относительно новое) устройство 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

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

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

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

Опять же, именно ожидаемый результат в случае успешных преобразований цветов!

Ответ 2

Новое устройство вывода предоставило этот ответ устаревшим, см. принятый ответ.


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