EPS返回所有类型颜色格式的CMYK结果

时间:2015-08-21 03:43:50

标签: c# imagemagick ghostscript eps magick.net

我正在使用ImageMagick / Ghostscipt处理所有*.eps个文件,并获取每个图像的颜色配置文件并显示结果。但我得到的结果与CMYK相同,适用于灰度,RGB,CMYK 我不知道我在哪里犯了错误,或者哪个属性会得到确切的结果。

C#代码

namespace ConsoleApplication3
{
    using System;
    using System.IO;

    using ImageMagick;

    class Program
    {
        static void Main(string[] args)
        {
            foreach (var epsFile in Directory.GetFiles(@"c:\tmp\eps", "*.eps"))
            {
                using (var image = new MagickImage())
                {
                    image.Read(epsFile);

                    Console.WriteLine("file: {0}   color space: {1}", epsFile, image.ColorSpace);
                }
            }
        }
    }
}

预期结果

file: c:\tmp\eps\a.eps   color space: CMYK
file: c:\tmp\eps\b.eps   color space: CMYK
file: c:\tmp\eps\c.eps   color space: CMYK
file: c:\tmp\eps\circle.eps   color space: sRGB
file: c:\tmp\eps\d.eps   color space: CMYK
file: c:\tmp\eps\e.eps   color space: CMYK
file: c:\tmp\eps\f.eps   color space: Grayscale
file: c:\tmp\eps\football_logo.eps   color space: sRGB
file: c:\tmp\eps\fsu_logo.eps   color space: sRGB
file: c:\tmp\eps\g.eps   color space: CMYK
file: c:\tmp\eps\icam_logo.eps   color space: sRGB
Press any key to continue . . .

但目前的结果是

file: c:\tmp\eps\a.eps   color space: CMYK
file: c:\tmp\eps\b.eps   color space: CMYK
file: c:\tmp\eps\c.eps   color space: CMYK
file: c:\tmp\eps\circle.eps   color space: CMYK
file: c:\tmp\eps\d.eps   color space: CMYK
file: c:\tmp\eps\e.eps   color space: CMYK
file: c:\tmp\eps\f.eps   color space: CMYK
file: c:\tmp\eps\football_logo.eps   color space: CMYK
file: c:\tmp\eps\fsu_logo.eps   color space: CMYK
file: c:\tmp\eps\g.eps   color space: CMYK
file: c:\tmp\eps\icam_logo.eps   color space: CMYK
Press any key to continue . . .

1 个答案:

答案 0 :(得分:1)

一个简单的解决方案是覆盖用于设置颜色空间的PostScript运算符,例如setrgbcolor,setgray,setcmykcolor和setcolorspace。

例如:

/system_setrgbcolor /setrgbcolor load def

/setrgbcolor {
  (EPS file used setrgbcolor) == flush
  system_setrgbcolor
}bind def

或者更复杂的解决方案:

/MyDict 10 dict def
/MyDict begin
/UsedRGB false def
/UsedGray false def
/UsedCMYK false def
end

/system_setrgbcolor /setrgbcolor load def

/setrgbcolor {
  /MyDict /UsedRGB get not {
    (EPS file used setrgbcolor) == flush
    /MyDict /UsedRGB true put
  } if
  system_setrgbcolor
  end
}bind def

后者应该只打印颜色空间的第一次使用。

注意,此代码未经测试,可能包含错误。