bytearray 到图像 asp.net

Posted

技术标签:

【中文标题】bytearray 到图像 asp.net【英文标题】:bytearray to image asp.net 【发布时间】:2010-12-16 19:38:30 【问题描述】:

我有一个代表图片的字节数组。我想在 aspx 页面中显示存储在该字节数组中的图片。我可以使用图像或图像映射控件吗?如果是这样 - 如何?如果不是 - 解决方案是什么?

【问题讨论】:

【参考方案1】:

想想在网页中如何提供普通图像 - 文件名在标记中引用,浏览器向服务器发送单独的请求以获取该文件。

这里也适用相同的原则,除了引用静态图像文件之外,您需要引用为图像字节提供服务的 ASP.NET 处理程序:

<img src="/imagehandler.ashx" />

处理程序的缩写如下所示:

public class ImageHandler : IHttpHandler

    public void ProcessRequest(HttpContext context)
    
        context.Response.OutputStream.Write(imageData, 0, imageData.Length);
        context.Response.ContentType = "image/JPEG";
    

这是在 ASP.NET 中创建 HttpHander 的(长)resource that covers the concepts。

另外,正如 Joel 所指出的,考虑字节数组的来源,因为 HttpHandler 是在与页面完全不同的请求中提供的。在最基本的层面上,这两个请求不知道彼此或共享任何数据。

解决这个问题的一个常见方法是将图像数据放入缓存中:

Guid id = Guid.NewGuid();
HttpRuntime.Cache.Add(id.ToString(), imageData);

并在查询字符串中将密钥传递给 HttpHandler,以便它可以从缓存中获取它:

<img src="/imagehandler.ashx?img=<%=id%>" />
<!-- will print ...ashx?img=42a96c06-c5dd-488c-906f-cf20663d0a43 -->

【讨论】:

+1 - 另请注意,这意味着您可能需要重新考虑当前页面的工作方式,因为您可能在处理对不同资源的请求的过程中获得了字节数组。 【参考方案2】:

您可以编写一个通用的处理程序来提供图片:

<%@ WebHandler Language="C#" Class="Picture" %>

public class Picture : System.Web.IHttpHandler

    public void ProcessRequest(HttpContext context)
    
        byte[] buffer = GetPictureFromSomewhere();
        context.Response.ContentType = "image/jpeg";
        context.Response.OutputStream.Write(buffer, 0, buffer.Length);
    

    public bool IsReusable
    
        get  return false; 
    

然后在一个aspx页面中调用它:

<asp:Image ID="pic" runat="server" ImageUrl="~/Picture.ashx" />

【讨论】:

【参考方案3】:

以下文章回答了你的问题:Auto-bind byte[] to asp:Image

【讨论】:

【参考方案4】:

您可以做的另一件更快的事情是不使用 asp.net Image 控件并使用 html 中的基本 img 元素。因此,在您的 asp.net 页面中,创建一个 id 为 img 且 runat 设置为 server 的 img 元素。

然后你可以这样做:

&lt;img id="img" runat="server" alt=""/&gt;

public DataRow ClaimPhotoRow  get; set; 
protected void Page_Load(object sender, EventArgs e)

    img.Src = "data:image/jpg;base64," + Convert.ToBase64String((byte[])ClaimPhotoRow[0]);


【讨论】:

聪明的解决方案。请注意,版本 8 之前的 IE 不能使用数据 url 方案 caniuse.com/datauri 非常感谢您用最少的步骤解决了我的问题。

以上是关于bytearray 到图像 asp.net的主要内容,如果未能解决你的问题,请参考以下文章

使用Java处理图像和文件处理

随机字节的bytearray转换为灰度图像和BGR图像

Camerax 图像分析:将图像转换为 bytearray 或 ByteBuffer

python opencv从bytearray创建图像

java内部如何将任何类型的文件(图像,pdf等)转换为bytearray?

如何将 bytearray 转换为 img 标签?