用于eps文件的c#元数据提取器

时间:2016-09-21 04:59:11

标签: c# image

我需要获取eps文件的宽度和高度。

我试过https://github.com/drewnoakes/metadata-extractor

但它不适用于eps文件。

所以我使用exiftool.exe并在程序上运行它。

但程序很慢。因为它为每个eps文件运行程序(exiftool.exe)。

是否有任何方法可以更快地获取eps文件的宽度和高度?谢谢

下面是我获取图像宽度和高度的代码

System.Diagnostics.Process pProcess = new System.Diagnostics.Process();
                            string filename = tempPath;
                            pProcess.StartInfo.FileName = System.IO.Path.GetDirectoryName(Environment.GetCommandLineArgs()[0]) + "\\exiftool.exe";
                            string toolPath = @"" + "\"" + filename + "\"";
                            pProcess.StartInfo.Arguments = toolPath;
                            pProcess.StartInfo.CreateNoWindow = true;
                            pProcess.StartInfo.UseShellExecute = false;
                            pProcess.StartInfo.RedirectStandardOutput = true;
                            pProcess.Start();
                            string strOutput = pProcess.StandardOutput.ReadToEnd();
                            pProcess.WaitForExit();
                            string source = strOutput;

如果我将其转换为eps文件,我需要设置其密度以获得高质量的转换图像。如果我这样做转换后的图像的高度和宽度将不相同。我使用了ImageMagick dll。为了那个原因。并且链接还运行exe文件。这也会减慢程序的速度

1 个答案:

答案 0 :(得分:2)

我不确定这是否适合您,但EPS有标签

%%BoundingBox: 0 0 350 350

如果您阅读该文件,则可以使用此文件。

例如

var eps = File.ReadAllLines(path).FirstOrDefault(l => l.StartsWith("%%BoundingBox:"));
if (eps != null)
{
    var dimensions = eps.Split(new[] {' '}, StringSplitOptions.RemoveEmptyEntries)
        .ToList()
        .Skip(1)
        .Select(s => Convert.ToInt32(s))
        .ToList();
    var width = dimensions[2] - dimensions[0];
    var height = dimensions[3] - dimensions[1];
    Console.WriteLine($"{width} {height}");
}

你可以优化它,不要读取整个文件,因为边界框在开头。