0

我正在尝试在我使用 VS2012 开发的 Web 应用程序中的 Web 表单的图像标签上显示我的图片。我已经将我的图像以二进制形式存储在 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();
    }
4

3 回答 3

1

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

这是将二进制内容插入图像标签的另一种技术。

您可以将其写入标签的src属性中,而不仅仅是将二进制内容流式传输到浏览器。<img>您想要的 HTML 看起来像这个示例(请注意,图像内容是 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>标签。如果您使用的是服务器端控件,则可以使用这样的代码(此示例片段来自此 SO 答案):

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

补充

这样做的一个可能的好处是,如果设计允许或需要它,您可以在一次数据库行程中检索多个图像。

但正如我在评论中所说的那样,这种方法的缺点是图像被同步处理,因为你的页面被处理了。

于 2013-05-23T04:31:10.740 回答
1

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

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

于 2013-05-23T04:22:52.770 回答
0

你有两个选择:

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

当然,您可以将两者混合使用。

于 2013-05-23T04:20:25.333 回答