2015-08-21 4 views
0

Я обрабатываю все файлы *.eps с использованием ImageMagick/Ghostscipt и получаю цветовые профили каждого изображения и отображаю результат. Но я получаю такой же результат, как CMYK для оттенков серого, RGB, CMYK.
Я не знаю, где я делаю ошибку или какое свойство получит точный результат.EPS Возвращаемый результат 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

Вы уверены, что 'circle.eps', а остальные на самом деле не являются цветами CYMK? Попробуйте [конвертировать их] (http://stackoverflow.com/a/18918798/75500) и повторите проверку. – Shimmy

+0

В моем случае circle.eps - RGB. внутри круга имеется три комбинации цветов, поэтому его результат должен быть RGB. Я не требовал преобразования, мне просто нужно знать, каков текущий профиль каждого изображения. – newbeee

+0

Я знаю, что вы не хотите конвертировать. Я просто предложил вам попробовать конвертировать и посмотреть, узнает ли Магия цветовое пространство, которое оно само преобразует. Как вы уверены, что цветовое пространство для круга - RGB? – Shimmy

ответ

1

One s Решением этого является переопределение операторов 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 

Последний должен печатать только первое использование цветового пространства.

NB этот код не проверен и может содержать ошибки.

+0

Зачем переопределять? это найти фактическое свойство цвета файла eps? – newbeee

+0

Поскольку переопределение оператора позволяет определить его использование. Таким образом, вы можете абсолютно гарантировать, что цветовое пространство используется. Файлы EPS не имеют «свойства цвета», они могут использовать любой из них; Серый, RGB, CMYK, CIEA, CIEABC, CIEDEF, CIEDEFG, DeviceN или Разделение. Кроме того, они могут использовать любой или все из них в одном файле. – KenS