【问题标题】:Byte array to Image on IIS6字节数组到 IIS6 上的图像
【发布时间】:2014-06-15 10:25:32
【问题描述】:

改写问题:

我有大量的 .tif 文件,其中大部分(如果不是全部)具有以下定义:

  • 位深:1
  • 压缩:CCITT T.6(第 4 组)

有些是多页的,有些不是。

我使用以下方法加载它们:

private byte[] LoadArchivedFile()
{
    FileStream file = File.Open(fileAddress, FileMode.Open, FileAccess.Read, FileShare.Read);
    byte[] fileByteArray = ReadFully(file, 0);
    return fileByteArray;
}

然后我将这些字节数组保存在 SQL Server 12 DB 的 varbinary 列中。

现在,我正在制作一个 MVC2 网页来查看这些 .tif 文件。那么这个过程应该是:

  • 加载字节数组
  • 将其转换为Image
  • 在 .tif 中选择一个页面
  • 将该页面转换为 Jpeg
  • 将页面发送到浏览器

在开发环境中一切正常。在目标 IIS 上安装项目后(目前是 6,我已经打开了 7.5 的请求),该过程在以下行失败:

[... load byte array from DB]
byte[] imageBinary = (byte[])results.fileBinary;

using(MemoryStream ms = new MemoryStream(imageBinary))
{
    Image image = Image.FromStream(ms);  <---- FAILS HERE
    [...]
}

堆栈跟踪:

System.ArgumentException: Parameter is not valid.
at System.Drawing.Image.FromStream(Stream stream, Boolean useEmbeddedColorManagement, Boolean validateImageData)
at System.Drawing.Image.FromStream(Stream stream)
at [MyCode]

现在,我收到的字节数组没有问题 - 它字面上是来自数据库的相同数据。我什至比较了几个字节,总长度......无论如何,它是相同的来源。这不是问题所在。

I found another question 有类似(尽管不完全相同)的问题。在那里,位深度、像素格式、压缩和编解码器的问题。 我目前不确定原始图像的像素格式是什么,尽管从字节数组转换回图像后它是 Format1bppIndexed。

我几乎不知所措...目标机器上缺少编解码器的问题是什么?在将图像二进制文件上传到数据库之前,我需要做些什么吗?

【问题讨论】:

    标签: c# asp.net-mvc-2 iis-6 tiff image-conversion


    【解决方案1】:

    仅供参考 - 如果可能,切换到 IIS7 可以完全解决问题。

    我还没有在 IIS6 上解决这个问题……又花了一个完整的工作日敲定它……无济于事。 我相信它与 MIME 类型的处理有关,是 IIS7 中 DLL 的一些补充,也许是 GDI+ ......我真的不知道。 但是,如果其他人遇到这个问题 - 升级到 IIS7 并为自己省去麻烦。

    【讨论】:

      猜你喜欢
      • 2012-07-28
      • 1970-01-01
      • 1970-01-01
      • 2012-05-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-15
      • 1970-01-01
      相关资源
      最近更新 更多