1

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

4

2 回答 2

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

我不知道你会如何处理带有图案颜色的填充:-)

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

于 2013-05-22T07:55:44.950 回答
0

如果您所做的只是获取直方图并将其丢弃,则位图的大小并不重要:

 pstopnm -stdout file.ps | ppmhist

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

于 2013-05-22T19:33:53.713 回答