如何将文本和图像写入ASP.NET中的Response.OutputStream

时间:2009-12-04 20:54:28

标签: c# .net asp.net webforms

我正在使用以下代码绘制图像并将其输出到网页:

Bitmap image = new Bitmap(350, 350);
Graphics g = Graphics.FromImage(image);
// code using g to draw image here
image.Save(Response.OutputStream, System.Drawing.Imaging.ImageFormat.Gif);

这很好用。现在我想在输出中添加一些文本(javascript)。但是,当我这样做*文本没有显示或图像作为垃圾出现。

这样做的正确方法是什么?

(* - 我更改了contenttype并使用了reponse.write。还尝试将一个字节数组文本写入输出流。)

3 个答案:

答案 0 :(得分:3)

您需要回复包含您的Javascript和<img>标记的HTML,该标记会导致您使用此图片回复其他请求。

可能会将请求此图片的<img>更改为<iframe>,并将src设置为请求。

或者,它可以是一个<script>标记,您可以将JavaScript返回并将其添加到DOM中。

答案 1 :(得分:3)

如果您仍想在一个请求中执行此操作,那么http://danielmclaren.net/2008/03/embedding-base64-image-data-into-a-webpage可能是最好的方法。它将base64编码数据直接包含在src标记的img属性中。即。

<img src="data:image/png;base64,iVBORw0KGgoAAAANS..." />

答案 2 :(得分:3)

您可以为您的图像代码编写一个名为imageGrab.aspx的单独文件,并使用javascript在另一个文件中调用此文件。它应该工作正常。例如

<img border=0 height=150 src='ImageGrab.aspx?seqid=3'>

imageGrab.aspx.cs看起来像

public partial class ImageGrab : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        try
        {
            byte[] byteData = new byte[0];

            // fetch the value of parameter into the byte array

            string seq_id = Request.QueryString["seqid"];

            if (string.IsNullOrEmpty(seq_id))
            {
                seq_id = "214";
            }


            byteData = DBManager.GetBinaryData(seq_id);

            Response.Clear();

            Response.ContentType = "image/jpeg";
            Response.BinaryWrite(byteData);
            Response.End();
        }
        catch (Exception exc)
        {
            Response.Write(exc.Message);
        }
    }

}