You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ghostscript.NET转换EPS到BMP时文件尺寸异常问题咨询

问题原因与解决方案

核心原因

  1. 非标准EPS文件结构:你将泰克示波器导出的calibration.txt直接改后缀为.eps,但该文件并非符合PostScript/EPS规范的文件。标准EPS会包含%!PS-Adobe-X.X EPSF-X.X头标识,以及%BoundingBox参数定义页面尺寸与内容边界;而泰克导出的文本文件大概率缺少这些关键元数据,导致Ghostscript无法正确识别内容的实际尺寸与方向。
  2. Ghostscript参数适配问题:你的代码中使用固定72DPI调用GetPage(72,72,0),且未添加针对非标准EPS的处理参数。对于无规范元数据的文件,Ghostscript会默认使用竖向的默认页面尺寸(如A4),实际内容仅占其中一小块;而在线转换器内置了自动检测内容边界、修复非标准EPS的逻辑,因此能生成正常的横向图片。
  3. 标准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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 11:47:54