2013-05-21 3 views
1

Я пытаюсь найти все значения заполнения и инсульта, используемые в файле EPS. Я могу проанализировать файл, я просто не могу понять, как значения цвета определены в разделе postscript EPS. Я преобразовал файл в SVG (используя ghostscript), и я могу получить шестнадцатеричные значения, но преобразование EPS в SVG с градиентом создает файлы размером 20x. Есть стандартный формат для значений цвета в postscript, который я могу извлечь из файла EPS?Как извлечь значения цвета из файла EPS?

ответ

1

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

Градиент вполне может быть определен как плавное затенение в PostScript, которое представляет собой конструкцию высокого уровня без эквивалента в SVG, поэтому она будет отображаться как изображение (следовательно, взрыв в размере).

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

/OriginalStroke /stroke load def 
/stroke { 
(Current colour space =) print currentcolorspace == flush 
(current colour =) print mark currentcolor counttomark -1 1 { -1 roll 20 string cvs print () print} for flush pop 
OriginalStroke 
} bind def 

Конечно, вы должны быть готовы справиться с богатым разнообразием возможных цветовых пространств в PostScript; Серый, RGB, CMYK, Разделение, DeviceN, CIEBasedA, CIEBasedABC, CIEBasedDEF, CIEBasedDEFG, Indexed и Pattern.

Возможно, вам не нужно знать исходные значения, я предполагаю, что это верно, потому что преобразование в SVG, я думаю, преобразует все цвета в RGB, поэтому, возможно, вам нужны только эквиваленты RGB. В этом случае вы могли бы просто использовать:

(current colour in RGB =) print currentrgbcolor 3 -1 roll == exch == == flush 

Я не знаю, как вы пустошь обрабатывать заливку с цветным рисунком, хотя :-)

Может быть, если вы объяснили, почему вы хотите знать, это было бы будет легче помочь.

+0

Спасибо за подробный ответ. Моя цель здесь - извлечь шестнадцатеричные значения, наиболее используемые в векторном изображении (ввод EPS). Я попытался сделать это, растрируя вектор, а затем анализируя гистограмму, но значения цвета отключены после растрирования изображения. При преобразовании EPS в SVG и затем анализе вывода я смог извлечь точные шестнадцатеричные значения, но это вызывает взрыв в размере и требует времени для обработки. Как я могу запустить вашу команду (текущий цвет в RGB) в файле EPS из командной строки? – ARolek

+0

Его немного большая, чтобы выполнить из командной строки, поместить его в файл и выполнить этот файл непосредственно перед тем, который вы хотите отбирать. т.е. 'gs file1.ps file2.eps – KenS

+0

Интересная идея. Я выполнил 'gs color.ps myfile.eps', и я получаю вывод «текущего цвета в RGB = 0.0» в верхней части моего файла color.ps%! PS. Кажется, он не запускает color.ps на myfile.eps. Что мне не хватает? – ARolek

0

размер битового изображения не имеет значения, если все, что вам сделать, это получить гистограмму и выбросить:

pstopnm -stdout file.ps | ppmhist 

Я предположить каждый имеет NetPBM ... netpbm.sourceforge.net

+0

Я собираюсь запустить этот запуск, но не будет ли это растеризовать изображение, поэтому значения цвета из EPS будут неправильными? Я пытаюсь получить точные значения цвета экстракта. – ARolek

+0

Изображение будет отображаться, да, и будет преобразовано в RGB. Обратите внимание, что, как я уже говорил выше, есть * lots * цветовых пространств в PostScript, а не только RGB. Как вы планируете обрабатывать шаблоны? Если я заполняю прямоугольник шаблоном, это значения цвета, используемые для рисования шаблона, используемого один раз, или столько раз, сколько требуется для разбиения области? Если вы визуализируете растровое изображение, тогда результат будет «столько раз, сколько требуется для разбивки области» – KenS

+0

. Я думаю, что это неясно, какой желаемый результат. Если на странице используется куча разных цветовых пространств, вы хотите получить всю эту информацию: на этой странице используются следующие цветовые пространства со списком цветовых спецификаций в каждом цветовом пространстве? В противном случае его непонятно, что вы подразумеваете под «точным» – agentp