【问题标题】:Download dynamically generated image from ASP.NET website从 ASP.NET 网站下载动态生成的图像
【发布时间】:2011-11-17 11:11:12
【问题描述】:

我正在从文本和我的 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);      
}

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

干杯。

【问题讨论】:

    标签: c# asp.net image image-processing dynamic


    【解决方案1】:

    【讨论】:

    • 所以我应该这样做:Response.AddHeader("Content-Disposition", "attachment; filename=" + fileinfo.Name);和 Response.AddHeader("Content-Length", fileInfo.Length.ToString());然后 Response.WriteFile(fileinfo.FullName);我应该如何提供这个动态生成的图像名称和长度?我无法让它工作。
    • @Peter:名字可以是任何你想要的;没关系。比如你可以这样做:Response.AddHeader("Content-Disposition", "attachment; filename=" + "abc.png"); 会提示用户下载图片“abc.png”。
    【解决方案2】:

    保存文件后:

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

    【讨论】:

    • 正确吗?我有疑问,因为我没有将图像保存为 podpis.png。我只是将 podpis.png 粘贴到动态创建的位图的底部。如何将生成的位图传递给用户下载?
    • 我相信您可以直接将其写入页面而不是保存文件... Response.WriteFile(Response.OutputStream);
    • 问题是我不想直接写到页面上。我希望用户单击按钮 -> 正在生成图像 -> 弹出下载窗口并且用户正在保存图像
    • appendheader("content-disposition", "attachment;" 应该这样做。试试吧。我现在不能尝试,但我很确定这样可以解决问题。回发将成为附件,然后浏览器将决定做什么——下载、保存等。
    猜你喜欢
    • 2013-01-04
    • 1970-01-01
    • 1970-01-01
    • 2017-11-10
    • 1970-01-01
    • 1970-01-01
    • 2013-01-06
    • 2011-08-16
    • 1970-01-01
    相关资源
    最近更新 更多