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 元素。
然后你可以这样做:
<img id="img" runat="server" alt=""/>
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的主要内容,如果未能解决你的问题,请参考以下文章
Camerax 图像分析:将图像转换为 bytearray 或 ByteBuffer