从ASP.NET网站下载动态生成的图像

3

我是通过文字和已存在于我的asp.net网站上的图片动态生成图片。

这是代码:

protected void Button1_Click(object sender, EventArgs e)
{
    var tytul = Request.QueryString["Tytul"];
    var tresc = Request.QueryString["Tresc"];

    var font = new Font("Verdana", 23);

    var brushForeColor = new SolidBrush(Color.Black);
    var brushBackColor = new SolidBrush(Color.FromArgb(248, 247, 182));

    var test = new Bitmap(450, 60);
    var graphicstest = Graphics.FromImage(test);
    var width = (int)graphicstest.MeasureString(tresc, font).Width;
    var height = (int)graphicstest.MeasureString(tresc, font).Height;

    while (width > 450)
    {
        height = height + 25;
        width = width - 450;
    }

    var heightall = height + 40 + 30 + 100;

    var bitmap = new Bitmap(450, heightall);
    var graphics = Graphics.FromImage(bitmap);

    var displayRectangle = new Rectangle(new Point(0, 0), new Size(450, 40));
    graphics.FillRectangle(brushBackColor, displayRectangle);

    //Define string format 
    var format1 = new StringFormat(StringFormatFlags.NoClip);
    format1.Alignment = StringAlignment.Center;

    var format2 = new StringFormat(format1);

    //Draw text string using the text format
    graphics.DrawString(tytul, font, brushForeColor, displayRectangle, format2);

    // Rysowanie drugiego boxa

    brushBackColor = new SolidBrush(Color.FromArgb(253, 253, 202));
    font = new Font("Verdana", 18);

    displayRectangle = new Rectangle(new Point(0, 40), new Size(450, height + 30));
    graphics.FillRectangle(brushBackColor, displayRectangle);

    displayRectangle = new Rectangle(new Point(0, 55), new Size(450, height + 15));


    graphics.DrawString(tresc, font, brushForeColor, displayRectangle, format2);

    graphics.DrawImage(System.Drawing.Image.FromFile(Server.MapPath(".") + "/gfx/layout/podpis.png"), new Point(0, height + 70));

    Response.ContentType = "image/png";
    bitmap.Save(Response.OutputStream, ImageFormat.Png);      
}

如您所见,在postback之后,位图被保存并显示在aspx页面上。我想要实现的是,当用户点击Button1时,生成图像并弹出浏览器下载窗口,而不是保存在服务器或在页面上显示。怎么做?请帮我。

谢谢。

2个回答

1

所以我应该像这样做:Response.AddHeader("Content-Disposition", "attachment; filename=" + fileinfo.Name); 和 Response.AddHeader("Content-Length", fileInfo.Length.ToString()); 然后 Response.WriteFile(fileinfo.FullName);我该如何提供动态生成的图像名称和长度?? 我无法让它工作。 - Peter
@Peter:名称可以是任何你想要的,这并不重要。例如,你可以这样做:Response.AddHeader("Content-Disposition", "attachment; filename=" + "abc.png"); 用户将被提示下载图像“abc.png”。 - Icarus

0

保存文件后:

Response.AppendHeader("content-disposition", "attachment; filename=podpis.png" );
Response.WriteFile("yourfilepath/podpis.png");
Response.End;

这正确吗?我有疑问,因为我没有将图像保存为podpis.png。我只是将podpis.png粘贴到动态创建的位图底部。如何传递生成的位图以供用户下载? - Peter
我相信你可以直接将文件写入页面,而不是保存文件...Response.WriteFile(Response.OutputStream); - Michael C. Gates
问题是我不想直接将它写入页面。我希望用户点击按钮->图像生成->下载窗口弹出,用户保存图像。 - Peter
使用appendheader("content-disposition", "attachment;")应该可以解决问题。你可以试一下。我现在无法尝试,但我非常确定这会奏效。postback将作为附件,然后浏览器将决定如何处理--下载、保存等。 - Michael C. Gates

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