.net - 某些图像无法在 Windows Server 2008 上加载

标签 .net image windows-server-2008 gdi+

我有一个在 Windows Server 2008 上运行的应用程序,它正在处理上传的图像。目前,它每天成功处理大约 8000 张图像,为每张图像创建 11 种不同大小的图像。

我遇到的问题是有时应用程序无法加载某些图像,我收到错误“System.Runtime.InteropServices.ExternalException:GDI+ 中发生一般错误。”。

上传只接受带有 JPEG 扩展名 (jpg/jpeg/jpe) 或带有 JPEG MIME 类型的文件,据我所知,这些图像实际上是 JPEG 图像。如果我在服务器上的 windows 资源管理器中查看图像文件,它可以成功地从文件中提取缩略图,但是如果我尝试打开它,我收到错误消息“这不是有效的位图文件,或者它的格式是目前不支持。”从油漆。

如果我将图像复制到我自己的计算机上,运行 Windows 7,打开图像没有问题。它适用于画图、Windows 照片查看器、Adobe Bridge 和 Photoshop。如果我尝试使用 Image.FromStream 以与在服务器上运行的应用程序相同的方式加载图像,它加载得很好。 (我已将文件复制回服务器,但它仍然不起作用,因此复制过程中没有任何内容对其进行更改。)

当我在 Bridge 中查看图像信息时,我看到这些图像是使用 Picasa 3.0 创建的,但除此之外我看不到它们的任何特殊之处。我还没有发现任何人有同样的问题,或者 Picasa 应用程序有任何已知的问题。

有没有人遇到过类似的问题,或者知道使用 Picasa 创建的图像是否有什么特别之处?是否有需要在服务器上安装任何图像编解码器来处理各种 JPEG 图像?

以下是未在服务器上加载的图像示例:gdi-example.jpg (192 KB)。

最佳答案

从专家交流中,我得到了一个使用 BitmapImage 对象加载图像并将其重新保存到 MemoryStream 的示例。由于某种原因,BitmapImage 可以加载 Bitmap 对象不能加载的图像。

我还必须从文件中加载数据并将其作为 MemoryStream 提供给 BitmapImage,这样它就不会锁定文件。

所以,这是我现在使用的最终代码(没有一些日志记录):

using WpfImaging = System.Windows.Media.Imaging;
...

byte[] data = File.ReadAllBytes(FileName);

Image master;
using (MemoryStream source = new MemoryStream(data)) {
  var img = new WpfImaging.BitmapImage();
  img.BeginInit();
  img.StreamSource = source;
  img.EndInit();
  WpfImaging.BmpBitmapEncoder encoder = new WpfImaging.BmpBitmapEncoder();
  using (MemoryStream m = new MemoryStream()) {
    encoder.Frames.Add(WpfImaging.BitmapFrame.Create(img));
    encoder.Save(m);
    master = new Bitmap(m);
  }
}

关于.net - 某些图像无法在 Windows Server 2008 上加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2643812/

相关文章:

c# - 系统关闭/重启时的 Windows 服务日志写入

c# - 如何检查字符串是否是命名空间

image - 如何编码图像以通过 Python HTTP 服务器发送?

asp.net - Windows 身份验证当前用户模拟 401 未经授权

c# - 在 C# 中打开 HTML 文档

c# - 创建 Thickness() 时如何使用合格的 Double?

jquery - 使用 jQuery 进行图像动画

java - 在指定位置将一张图像合并到另一张图像上并将其另存为新图像?

php - 如何使用 IIS 在 Windows Server 2008 上安装 Laravel 4.2/5?

version-control - Windows 7 上的 TortoiseHg 通过 Windows Server 2008 R2 上的 KpyM 进行 SSH 克隆 - 远程 hg 没有合适的响应