如何从EPS文件中提取颜色值?

时间:2013-05-21 22:46:14

标签: vector ghostscript postscript eps

我试图找到EPS文件中使用的所有填充和描边值。我可以解析文件,我只是无法弄清楚如何在EPS postscript部分中定义颜色值。我已经将文件转换为SVG(使用ghostscript)并且我可以获得十六进制值,但是使用渐变的EPS到SVG转换会生成大小为20倍的文件。我可以从EPS文件中提取postscript中的颜色值的标准格式吗?

2 个答案:

答案 0 :(得分: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,索引和模式。

可能你不需要知道原始值,我猜这是真的,因为我认为转换为SVG会将所有颜色转换为RGB,所以也许你只想要RGB等价物。在这种情况下,您可以简单地使用:

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

我不知道你如何用图案颜色处理填充物: - )

也许如果你解释了为什么你想知道这一点,那就更容易提供帮助。

答案 1 :(得分:0)

如果您所做的只是得到直方图并扔掉它,那么位图的大小应该不重要:

 pstopnm -stdout file.ps | ppmhist

假设每个人都有netpbm ... netpbm.sourceforge.net