我正在尝试处理 Ghostscript.NET 1.2.0.0 插件,以使用使用 C# 和 Windows 窗体编写的程序将 .eps 文件转换为 .bmp。
https://www.nuget.org/packages/Ghostscript.NET/1.2.0
我的结果很差,我无法真正找出问题的原因。 这是我的代码的一部分:
void ButtonConvertClick(object sender, EventArgs e)
{
string inputFilePath = @"C:\Users\Karlsson\Documents\SharpDevelop Projects\Converter\Converter\bin\calibration.eps";
string outputFilePath = @"C:\Users\Karlsson\Documents\SharpDevelop Projects\Converter\Converter\bin\calibration_csharp.bmp";
using (var rasterizer = new GhostscriptRasterizer())
{
rasterizer.Open(inputFilePath);
var image = rasterizer.GetPage(72,72,0);
var bmp = new Bitmap(image);
bmp.Save(outputFilePath, System.Drawing.Imaging.ImageFormat.Bmp);
pictureBox.Image = bmp;
rasterizer.Close();
}
}
测试文件是calibration.txt文件,这是泰克示波器记录的图像。
为了使转换成为可能,我将此文件的扩展名从 .txt 更改为 .eps。
在谈论我的 C# 代码完成转换的结果之前,我将展示它是如何通过 Convert.io 在线转换器实现的 https://convertio.co/eps-bmp/
(这里我手动将照片改为.jpg以节省尺寸)
用我的 C# 代码转换的 .eps 看起来完全不同 - 实际的水平图像占据了垂直方向的白纸的一小部分区域。
(这里我还手动将照片改为.jpg以节省尺寸)
rasterizer.GetPage仅对图像进行缩放,而绘图的大小与周围背景的比例是相同的。我无法像 Convert.io 的结果图像那样调整大小。当然,我意识到这个在线转换器要先进得多,但是,它以某种方式处理这个 .eps 文件。
我决定查看一些其他示例 .eps 文件并找到此页面:
https://people.sc.fsu.edu/~jburkardt/data/eps/eps.html
所以我拿了一些示例 .eps 文件,这是我用其中一个文件实现的效果(我选择了 mathematica.eps,一个简单的图表):
当然,我在代码中用mathematica.eps替换了calibration.eps。
突然发现,我使用 Ghostscript 的 C# 代码可以处理图像,其分辨率和整体尺寸与作为页面上的图案放置的示例的尺寸相同。
事实证明,第二个 .eps 文件的构建方式有点不同,它可能对转换方法有一些影响。但是,您能找到解释为什么我的代码在 Calibration.eps 文件(向图像添加白色背景)时失败,而它完美地处理了第二个图像吗?我对 PostScript 不太了解。
这是 Ghostscript.NET 库中的一个错误。
现已修补(https://github.com/ArtifexSoftware/Ghostscript.NET/commit/814b25eb50770ee4649600911f4bbb8a5638281c)
新库尚未正式发布,但您可以获取最新的源代码并自行编译。