将位图添加到HTML

4

我有一个ASP.NET网页表单。这个网页表单有一个事件处理程序,用于生成一些HTML。这个HTML是基于当天的时间,所以它是在事件处理程序中创建的。根据当天的时间,通过以下方法编程地创建一个图像:

private Bitmap GetImageForTime(DateTime time)
{
  Bitmap bitmap = new Bitmap();

  // Dynamically build the bitmap...

  return bitmap;
}

我希望在生成HTML时调用此方法。但是,我不想将图像写入服务器。相反,我想找出一种方法将其与HTML一起写出。从某种意义上说,我正在尝试实现以下目标:

protected void myLiteral_Load(object sender, EventArgs e)
{
  string html = "<table><tr><td>";
  html += GetImageForTime(DateTime.Now);  // This is the problem because it's binary.
  html += "</td><td>";
  html += GetWeatherHtmlText();
  html += "</td></tr></table>";
  myLiteral.Text = html;
}

这是否可能?如果是,该如何实现?

6个回答

5

我建议实现一个IHttpHandler来生成您的图像并将其作为字节流返回。然后在页面上的 <img> 标签中,将src属性设置为HTTP处理程序的地址。

<html><body><img src="TimeImageHandler.ashx"/></body></html>

示例:http://www.c-sharpcorner.com/uploadfile/desaijm/httphandlersforimages11152005062705am/httphandlersforimages.aspx

一旦了解了它们,通用的HTTP处理程序就非常简单易懂:

public class TimeImageHandler : IHttpHandler
{
    public void ProcessRequest(HttpContext context)
    {
        Bitmap bitmap = GetImageForTime(DateTime.Now);
        context.Response.ContentType = "image/jpeg";
        bitmap.Save(context.Response.OutputStream, ImageFormat.Jpeg);
    }

    public bool IsReusable { get { return false; } }
}

2

我所采用的方法是在HTML中创建一个图像标签,并将图像源(<img src="xxx" />)指向一个页面,该页面动态创建图像并以正确的MIME类型返回响应流,仅返回该图像。


2

我一直很喜欢它,但不幸的是,在我进行测试的时候,发现它并没有得到广泛支持(特别是,它在IE中没有得到支持,我也不清楚当前版本如何)。 - ShinTakezou

1

HTML中的图像是通过HTML中的<img>元素显示的。我不相信还有其他方法可以在HTML页面中显示图像。

您需要编写一个处理程序,该处理程序可以通过<img>元素的src属性中的URL调用。该处理程序将生成并返回图像。


0
创建另一个名为TimeImage.aspx的aspx页面,然后在该页面的代码后置程序Page_Load中放置以下代码:
void Page_Load(object sender, EventArgs args) {
    string mime = "image/jpeg";
    Response.ContentType = mime;

    Bitmap b = GetImageForTime(DateTime.Now);

    var codec = ImageCodecInfo.GetImageEncoders().Where(i => i.MimeType == mime).SingleOrDefault();

    if(codec != null)
        b.Save(Response.OutputStream, codec, null);
}

然后让你的HTML生成看起来像这样:

protected void myLiteral_Load(object sender, EventArgs e)
{
  string html = "<table><tr><td>";
  html += "<img src='TimeImage.aspx'>"
  html += "</td><td>";
  html += GetWeatherHtmlText();
  html += "</td></tr></table>";
  myLiteral.Text = html;
}

这将创建一个img标签,调用TimeImage.aspx页面,该页面将响应的MIME类型更改为image/jpeg,将位图转换为JPG,然后将其保存到响应输出流中,以便图像标记可以显示为JPG。

如果您喜欢其他格式,只需在顶部更改MIME类型(例如,对于GIF,请使用“image/gif”,对于PNG,请使用“image/png”)。


0
除了使用 data URI 方案或动态创建图像并发送(因此无需存储)的已有解决方案外,还有另一种奇怪的解决方案可供尝试:使用每个单元格高度和宽度均为1像素且具有适当背景的表格,当然不包含边框...例如,GIMP 可以将图像导出为 HTML,如果您强制设置单元格和表格的大小,则可以将图像视为嵌入式... 当然,如果图像很大,则会相对较“沉重”,但对于相对较小的图像,这可能还是可以工作的。
编辑(添加斜体部分)

当然,我做GIMP的例子并不是说你要用它来做那个...我只是说这样做很容易,就像在HTML中生成普通表格一样,所以有很多html +=... - ShinTakezou

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接