Определение цвета в файлах PostScript - PullRequest
0 голосов
/ 06 июня 2018

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

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

1 Ответ

0 голосов
/ 06 июня 2018

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

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

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

/rg /setrgbcolor load def

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

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

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

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

...