我正在使用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 . . .
答案 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
后者应该只打印颜色空间的第一次使用。
注意,此代码未经测试,可能包含错误。