Ghostscript.NET转换EPS到BMP时文件尺寸异常问题咨询
问题原因与解决方案
核心原因
- 非标准EPS文件结构:你将泰克示波器导出的
calibration.txt直接改后缀为.eps,但该文件并非符合PostScript/EPS规范的文件。标准EPS会包含%!PS-Adobe-X.X EPSF-X.X头标识,以及%BoundingBox参数定义页面尺寸与内容边界;而泰克导出的文本文件大概率缺少这些关键元数据,导致Ghostscript无法正确识别内容的实际尺寸与方向。 - Ghostscript参数适配问题:你的代码中使用固定72DPI调用
GetPage(72,72,0),且未添加针对非标准EPS的处理参数。对于无规范元数据的文件,Ghostscript会默认使用竖向的默认页面尺寸(如A4),实际内容仅占其中一小块;而在线转换器内置了自动检测内容边界、修复非标准EPS的逻辑,因此能生成正常的横向图片。 - 标准EPS的兼容性:像
mathematica.eps这类标准示例文件,包含完整的EPS规范元数据,Ghostscript可以直接解析并匹配内容尺寸,因此转换结果正常。
解决方案
1. 验证并修复EPS文件规范
先检查calibration.eps的内容:
- 打开文件查看开头是否有
%!PS-Adobe-3.0 EPSF-3.0(或类似版本)的标识 - 查找是否存在
%BoundingBox: llx lly urx ury行(定义内容的左下角与右上角坐标)
如果缺少这些内容,需要手动添加或通过工具将文本内容转换为标准EPS格式。
2. 修改代码添加Ghostscript适配参数
在打开GhostscriptRasterizer时,添加针对非标准EPS的处理参数,强制Ghostscript裁剪到实际内容边界:
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()) { // 添加Ghostscript参数,处理非标准EPS var gsParameters = new List<string> { "-dEPSCrop", // 自动裁剪到内容的实际边界 "-dAutoRotatePages=/None", // 禁止自动旋转页面,保持原始方向 "-dUseCropBox" // 使用裁剪框替代默认页面尺寸 }; rasterizer.Open(inputFilePath, gsParameters.ToArray(), false); // 尝试获取第1页(部分EPS页码从1开始) var image = rasterizer.GetPage(72, 72, 1); var bmp = new Bitmap(image); bmp.Save(outputFilePath, System.Drawing.Imaging.ImageFormat.Bmp); pictureBox.Image = bmp; } }
3. 调整DPI与尺寸匹配
如果上述参数仍未解决问题,可以尝试获取EPS的实际边界尺寸,再计算对应的DPI:
// 在Open之后,获取页面的宽度和高度(单位:点) int pageWidth = rasterizer.PageWidth; int pageHeight = rasterizer.PageHeight; // 根据目标尺寸计算DPI,比如生成1000px宽的图片 float dpi = 1000f / (pageWidth / 72f); var image = rasterizer.GetPage(dpi, dpi, 1);
内容的提问来源于stack exchange,提问作者Karlsson
相关产品推荐
相关产品推荐

