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

Windows Server 2025中.NET Framework 4.8.1 JPEG转PNG偏移及数据丢失

Windows Server 2025下System.Drawing.Image保存PNG字节数组异常的根因分析

问题现象

在Windows Server 2025环境测试应用时,导入的JPEG图像显示异常。排查后确认:该环境下通过System.Drawing.Image.Save生成的PNG格式字节数组,与Windows 11等版本存在显著差异——数组大小仅为预期的一半左右,且从某一数据节点开始内容偏离。未修复时,Windows Server 2025中图像会出现偏移、信息丢失;其他Windows版本则显示正常,生成的字节数组大小约为Server 2025的两倍。已验证桌面版Windows Server 2025的GDI+功能可用。

原正常运行代码(除Windows Server 2025外)

using (MemoryStream ms = new MemoryStream())
{
    image.Save(ms, ImageFormat.Png);
    this.m_imageBytes = ms.ToArray();
}

临时修复方案

通过先转存为BMP格式,再重新编码为PNG的方式规避问题:

using (MemoryStream ms = new MemoryStream())
{
    image.Save(ms, ImageFormat.Bmp);
    using (MemoryStream ms2 = new MemoryStream())
    {
        Image bmp = Bitmap.FromStream(ms);
        bmp.Save(ms2, ImageFormat.Png);
        this.m_imageBytes = ms2.ToArray();
    }
}

根因解析

该问题的核心在于Windows Server 2025中GDI+组件的PNG编码器逻辑变更或存在bug,具体可能的原因包括:

  • 编码器版本与压缩策略变更:Windows Server 2025更新了GDI+的PNG编码器,默认启用了更高压缩率的算法,但编码器对部分JPEG图像(尤其是特定色彩空间、像素格式的JPEG)的编码逻辑存在缺陷,导致生成的PNG字节数组被错误截断或数据偏移。
  • 像素格式处理差异:JPEG图像通常采用YCbCr色彩空间,直接通过GDI+编码为PNG时,Windows Server 2025的编码器对YCbCr转RGB的处理逻辑与旧版本不同,导致像素数据编码异常;而先转存为BMP后,图像会被转换为标准RGB像素格式,此时PNG编码器处理RGB数据的逻辑与旧版本一致,因此能生成正确的字节数组。
  • 服务器环境优化参数影响:Windows Server 2025针对服务器场景默认启用了GDI+的内存优化或资源限制策略,导致直接保存PNG时内存流的写入操作未完整执行,进而生成不完整的字节数组。

内容的提问来源于stack exchange,提问作者Jeff M

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 16:57:16