覆盖后记 /setcmykcolor

Overriding postscript /setcmykcolor

我正在尝试更改仅包含矢量(不包含光栅)的 EPS 文件的颜色。目前,我将它们转换为 SVG,处理颜色,然后使用 Inkscape 将它们转换回 PDF 或 EPS。这非常有效,但不允许我应用 CMYK 着色,只能应用 RGB。经过一些调查并找到 this or this I'm trying to override the /setcmykcolor function my EPS file uses. You can download it from here.

之类的答案

EPS 看起来像这样:

我想将颜色转换为 CMYK = 0 1 1 0,所以它看起来像这样:

在这种情况下,EPS 文件是黑色的,但也可以是任何其他颜色。我尝试在 %%BeginProlog 之后添加它,它应该覆盖 /setcmykcolor 以始终应用 0 1 1 0 作为 CMYK 颜色:

/osetcmykcolor {/setcmykcolor} bind def /setcmykcolor {pop [0 1 1 0] osetcmykcolor} def

或者这样:

/osetcmykcolor {/setcmykcolor} bind def /setcmykcolor {0 1 1 0 osetcmykcolor} def

但一切还是一片漆黑。我知道 /setcmykcolor 是正确的函数,因为在绘制路径之前使用 0 1 1 0 setcmykcolor 会使它变红。我浏览了 postscript 编程手册,但我很难弄清楚这里出了什么问题!

如有任何帮助,我们将不胜感激!

如果我启动 Ghostscript 然后执行:

GS> /osetcmykcolor /setcmykcolor load def
GS> /setcmykcolor {pop pop pop pop 0 1 1 0 osetcmykcolor} bind def
GS> (color.eps) run

然后 EPS 按您的预期在 'orange' 中呈现。

请注意,setcmykcolor 有 4 个参数,因此您必须弹出所有 4 个参数(虽然这不会导致缺少颜色,但只会在堆栈中留下垃圾)。

正在编辑 EPS 文件:

%!PS-Adobe-3.0 EPSF-3.0
%%BoundingBox: 0 0 564 454
%%HiResBoundingBox: 0.00 0.00 564.00 453.20
%%Creator: GPL Ghostscript 921 (eps2write)
%%LanguageLevel: 2
%%CreationDate: D:20200616000003-03'00'
%%Pages: 1
%%EndComments
%%BeginProlog
/osetcmykcolor /setcmykcolor load def
/setcmykcolor {pop pop pop pop 0 1 1 0 osetcmykcolor} bind def
/DSC_OPDFREAD true def

然后 运行 它与:

gs color1.eps

还会生成橙色文本。那么你如何测试它?