Определение цвета в файлах PostScript

У меня есть необходимость определить, был ли файл postscript отправлен на принтер в цветном или черно-белом режиме. Несмотря на то, что существует множество решений, они, как правило, требуют рендеринга документа и последующей проверки каждой страницы в отдельности с использованием ghostscript, что может быть немного медленным для больших документов. Мне было интересно, выдаст ли мне следующий grep ту же информацию или нет других типов цветов?

grep 'setrgbcolor\|setcymkcolor\|colorimage' foo.prn

1 ответ

Решение

Вам очень далеко до полного диапазона цветовых пространств, доступных в PostScript. У вас нет setcolorspace и setcolorspace принимает сложный массив аргументов, который может включать /DeviceGray (поэтому не цвет).

Вы также не учитываете CIEBasedA и тот факт, что C=M=Y=0, K является шкалой серого, даже если она выражена в пространстве CMYK, и, конечно, R=G=B - это оттенок серого, выраженный в пространстве RGB. Точно так же / Разделение / Черный нарисует в оттенке серого.

Кроме того, PostScript является языком программирования; Весьма распространено включать пролог, который определяет операции удобным для автора приложения для создания PostScript способом. Пролог может включать функции, которые не используются в этой конкретной программе. Так что-то вроде:

/rg /setrgbcolor load def

вызовет ваш grep, даже если программа PostScript не использует rg,

Тогда есть изображения. colorimage не единственный способ нарисовать изображение в PostScript, image Оператор принимает операнд словаря, который может включать цветовое пространство. Как и выше, возможно иметь серое изображение, выраженное в другом цветовом пространстве (неэффективно, возможно, но законно).

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

Можно написать устройство Ghostscript, которое могло бы выполнять эту работу, потому что оно получит все операции. Это все еще не будет полностью быстрым, поскольку оно должно интерпретировать весь файл, чтобы обнаружить каждую операцию. Даже тогда такой инструмент может быть побежден в определенных приложениях. Например, код может опросить основное устройство и выбрать другой путь кода, если цветовое пространство устройства было серым, RGB или CMYK. Но это вряд ли случится в любой реальной программе PostScript.

Другие вопросы по тегам