将图像插入到asp.net图像标记中

时间:2013-05-23 03:58:48

标签: c# asp.net sql-server image

我正在尝试在我使用VS2012开发的Web应用程序中的webform上的图像标签上显示我的图片。我已经在sql server 2008中以二进制形式存储了我的图像。我试图通过c#代码显示图像。但是,显示的图像是确切的尺寸大小。我正在尝试将此特定选定内容存储到具有特定维度的图像标记中。这是我用于显示图像的代码。

这里的代码是我从数据库中选出的图片。我设法用这个来显示图片。

string strQuery = "select profilepic from LoginRegisterOthers where username=@username";
            SqlCommand cmd = new SqlCommand(strQuery);
            cmd.Parameters.Add("@username", SqlDbType.VarChar).Value = username;
            DataTable dt = GetData(cmd);
            if (dt != null)
            {
                download(dt);
            }

此代码然后用于将图像二进制数据转换为图像。

private void download(DataTable dt)
    {
        Byte[] bytes = (Byte[])dt.Rows[0]["profilepic"];
        Response.Buffer = true;
        Response.Charset = "";
        Response.Cache.SetCacheability(HttpCacheability.NoCache);
        Response.ContentType = "image/jpg";
        //Response.AddHeader("content-disposition", "attachment;filename=" + dt.Rows[0]["Name"].ToString());
        Response.BinaryWrite(bytes);
        Response.Flush();
        Response.End();
    }

3 个答案:

答案 0 :(得分:1)

看一下这个网址。其中一个用户创建了一个以System.Drawing.Image作为输入的函数。在调用下面页面中编写的函数之前,您可能必须将从db下载的二进制数据写入System.Drawing.Image类型的对象中

http://social.msdn.microsoft.com/Forums/en-US/csharpgeneral/thread/a43fe625-a5cd-4438-895f-3ddeec6eb866/

答案 1 :(得分:1)

你对二进制数组做什么需要改变(如果我猜对了你想要做的事情)

这是将二进制内容插入图像标记的替代技术。

您可以将其写入src标记的<img>属性,而不是仅将二进制内容流式传输到浏览器。您希望拥有的HTML看起来像this example(请注意图像内容是Base64编码的):

<img   src="data:image/gif;base64,R0lGODlhUAAPAKIAAAsLav///88PD9WqsYmApmZmZtZfYmdakyH5BAQUAP8ALAAAAABQAA8AAAPb
WLrc/jDKSVe4OOvNu/9gqARDSRBHegyGMahqO4R0bQcjIQ8E4BMCQc930JluyGRmdAAcdiigMLVr
ApTYWy5FKM1IQe+Mp+L4rphz+qIOBAUYeCY4p2tGrJZeH9y79mZsawFoaIRxF3JyiYxuHiMGb5KT
kpFvZj4ZbYeCiXaOiKBwnxh4fnt9e3ktgZyHhrChinONs3cFAShFF2JhvCZlG5uchYNun5eedRxM
AF15XEFRXgZWWdciuM8GCmdSQ84lLQfY5R14wDB5Lyon4ubwS7jx9NcV9/j5+g4JADs=
" alt="British Blog Directory" width="80" height="15" />

现在,要实现这一目标,您可能有多种选择。这完全取决于您如何呈现<img>标记。如果您使用的是服务器端控件,那么这样的代码可能会这样做(此示例代码段来自this SO answer):

byte[] picByteArray = user.Picture.ToArray(); 
string myPicString = Convert.ToBase64String(picByteArray); 
myPicture.Attributes["src"] = "data:image/gif;base64," + myPicString;

<强> ADDITION

采用这种方式的一个可能的好处是,如果设计允许或需要它,您可以在单个数据库旅行中检索多个图像。

但正如我在评论中所说,这种方法的缺点是在处理页面时同步处理图像。

答案 2 :(得分:0)

您有两种选择:

    标签中的
  • 使用CSS或html属性指定图像的宽度和高度。这会导致用户始终下载完整尺寸的图像,但会显示裁剪
  • 在img标签的src中放置宽度和高度,如:image.aspx?width=200&height=100。解析服务器端的查询字符串并调整服务器上的图像大小。

当然你可以使用两者的混合。