I am processing all *.eps
files using ImageMagick/Ghostscipt and get the color profiles of each image and display the result. But I am getting same result as CMYK for grayscale, RGB, CMYK.
I don't know where I'm doing a mistake or which property will get the exact result.
C# code
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);
}
}
}
}
}
Expected result
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 . . .
But result currently coming is
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 . . .
One simple solution to this is to override the PostScript operators which are used to set colour spaces, such as setrgbcolor, setgray, setcmykcolor and setcolorspace.
Eg:
Or a somewhat more sophisticated solution:
The latter should only print the first usage of the colour space.
NB this code is untested and may contain bugs.