【问题标题】:display images in asp.net dynamically from c#从c#动态显示asp.net中的图像
【发布时间】:2012-12-21 00:23:06
【问题描述】:

我在我的 asp.net 网站的 c# 代码中动态创建控件。我想创建一个图像控件并显示一个从 wcf 服务获取的字节数组派生的图像。我尝试将字节数组转换为图像并使用以下代码保存在一个位置,但它不起作用。 谁能帮帮我!

 public System.Drawing.Image byteArrayToImage(byte[] byteArrayIn)
{
    MemoryStream ms = new MemoryStream(byteArrayIn);
    System.Drawing.Image returnImage = System.Drawing.Image.FromStream(ms);
    return returnImage;
}

【问题讨论】:

标签: c# asp.net image wcf bytearray


【解决方案1】:

您只是缺少Save 方法:

public string byteArrayToImage(byte[] byteArrayIn)
{
  string saveLocation = "<Path to save image to>"; // e.g. c:\mywebsite\image23.png
  MemoryStream ms = new MemoryStream(byteArrayIn);
  System.Drawing.Image returnImage = System.Drawing.Image.FromStream(ms);
  returnImage.Save(saveLocation);
  return saveLocation;
}

然后使用Server.MapPath 将保存文件位置的url 传递给asp:Image 控件。

我应该提一下,如果您已经有一个字节数组 - 而不是创建一个 image 对象来保存字节流 - 只需将字节流放在asp:imageImageUrl 控件如下:

image1.ImageUrl = "data:image/png;base64," + Convert.ToBase64String(byteArrayIn);

【讨论】:

  • @Annamalai - 应该可以正常工作,请告诉我们您在收到字符串后如何设置 URL。无论如何,我为您添加了另一个不需要将文件保存到磁盘的选项。
  • 对于某些浏览器,数据 uri 的 Base64 编码图像必须位于一行。 IIRC Convert.ToBase64String 拆分行。
  • 在任何情况下,数据 uri 都无法缓存,因此由于性能损失,不建议这样做。
  • @Ken-AbdiasSoftware 没有遇到任何导致行拆分的 ToBase64String 问题,但很高兴知道这是否会出现。关于性能损失,将所有图像保存到磁盘(并且仅将字符串 URL 存储在数据库中)始终是最佳实践,但在诸如 OP 之类的情况下 - 这并不总是可能的
【解决方案2】:

试试下面的

File.WriteAllBytes(@"C:\test.jpg", BYTE_ARRAY_OF_IMAGE);

【讨论】:

    【解决方案3】:

    很好。不需要创建图像对象。 这对我有用:

    image1.ImageUrl = "data:image/png;base64," + Convert.ToBase64String(byteArrayIn);
    

    【讨论】:

    • Prakash,这个问题很老了。确保下次它是一个活跃的问题。 GL!
    猜你喜欢
    • 2014-07-29
    • 1970-01-01
    • 2019-06-20
    • 1970-01-01
    • 2015-09-17
    • 1970-01-01
    • 2016-12-30
    • 2012-01-24
    • 1970-01-01
    相关资源
    最近更新 更多