代码之家  ›  专栏  ›  技术社区  ›  Rustam

我如何告诉ghostscript不要在eps文件中光栅化渐变?

  •  0
  • Rustam  · 技术社区  · 7 年前

    我正在寻找一种解决方案,可以让我阅读、编辑和保存.eps文件。我发现ghostscript可以提供所有这些机会。我需要的算法很简单:读取几个.eps文件,将它们连接到一个大文件中,然后保存新的.eps文件。我已经可以这样做了,但有一个问题:新生成和保存的文件不会保留渐变。梯度被光栅化,使用该梯度的形状被转换为剪裁遮罩。有没有办法告诉ghostscript不要在eps中光栅化渐变?

    这是示例代码:

    using (GhostscriptProcessor processor = new GhostscriptProcessor(lastInstalledVersion, true))
    {
        List<string> switches = new List<string>();
        switches.Add("-o");
        switches.Add(@"-sOutputFile=" + outputFile);
        switches.Add("-sDEVICE=eps2write");
        switches.Add("-dUseCIEColor=true");
        switches.Add("-c");
        switches.Add("<</Install {0.5 0.5 scale}>> setpagedevice");
        switches.Add("-f");
        switches.Add(inputFile);
    
        processor.Process(switches.ToArray());
    }
    
    1 回复  |  直到 7 年前
        1
  •  1
  •   KenS    7 年前

    你问的问题的答案很简单;你不能。由于某种原因,eps2write设备被称为只生成2级PostScript,而shfill运算符或类型2模式(PDF中的着色字典)是3级PostScript原语。

    然而,似乎没有任何理由通过Ghostscript运行现有文件。你说你已经有很多EPS文件了。EPS文件的全部要点是,它们可以被视为一个“黑匣子”,您不需要知道其中包含什么,就可以连接它们、重新排列它们等等。

    您所要做的就是编写一些“包装器”PostScript,在完整包含EPS文件之前修改CTM。您可以确定缩放和转换的参数应该是什么,因为EPS文件将有一个%%BoundingBox注释,告诉您它在用户空间中的位置。您只需更改比例,并使用“平移”偏移0,0原点(左下角)。

    推荐文章