在ASP.NET中将二进制数据转换为图像控件
我有我的数据库中的图像的二进制数据,我想在ASP.NET中的图像控件中显示它。 怎么样? 如果不可能,请find另一种方法将其保存在数据库中,并将其显示在图像控件中。
像这样创build一个常规的HTML img
元素:
<img runat="server" id="image" />
在代码背后做这个:
image.src = "data:image/png;base64," + Convert.ToBase64String(imageBytes);
其中imageBytes是一个byte[]
。
你完成了。 图像将被显示。
图像最有可能被作为字节数组存储在数据库中。 如果是这样,那么你可以使用这个:
public static System.Drawing.Image ByteArrayToImage(byte[] bArray) { if (bArray == null) return null; System.Drawing.Image newImage; try { using (MemoryStream ms = new MemoryStream(bArray, 0, bArray.Length)) { ms.Write(bArray, 0, bArray.Length); newImage = System.Drawing.Image.FromStream(ms, true); } } catch (Exception ex) { newImage = null; //Log an error here } return newImage; }
在通用处理程序(.ashx)中:
public class ImageHandler : IHttpHandler { public void ProcessRequest(HttpContext context) { if(!string.IsNullOrEmpty(context.Request.QueryString["ImageId"])){ try { string ImageId = context.Request.QueryString["ImageId"].ToString(); ImageDataModel idm = new ImageDataModel(); byte[] ImageData = idm.getImageData(ImageId); context.Response.ContentType = "image/JPEG"; context.Response.OutputStream.Write(ImageData, 0, ImageData.Length); }
public Byte[] Ret_image(Int32 id) { SqlCommand cmd = new SqlCommand(); cmd.CommandText = "select * from tbimage where imageid=@id"; cmd.Connection = con; cmd.Parameters.Add("@id", SqlDbType.Int).Value = id; SqlDataReader dr = cmd.ExecuteReader(); dr.Read(); Byte[] ar = (Byte[])(dr[1]); dr.Close(); cmd.Dispose(); return ar; }
protected void Button2_Click(object sender, EventArgs e) { Byte[] ar = Ret_image(Convert.ToInt32(TextBox2.Text)); String st = Server.MapPath("abc.jpg"); FileStream fs = new FileStream(st, FileMode.Create, FileAccess.Write); fs.Write(ar, 0, ar.Length); fs.Close(); Image1.ImageUrl = "abc.jpg"; }
使用这个事件来点击button来检索图像,并在这里调用Ret_Image
方法。
SqlConnection con = new SqlConnection(); string _path; Using SYstem.IO; Using System.Data.SQLClient; //convert Image to binary and save in DB private void button1_Click(object sender, EventArgs e) { if (openFileDialog1.ShowDialog() == DialogResult.OK) { _path = openFileDialog1.FileName; InsertInSQL(_path); } } private void InsertInSQL(string _path) { con.ConnectionString = Pic.Properties.Settings.Default.ConnectionS; string strQ = "insert into dbo.PicTBL(Pic)values(@p)"; SqlCommand command = new SqlCommand(strQ,con); command.Parameters.AddWithValue("@p",ImageToBinary(_path)); con.Open(); command.ExecuteNonQuery(); con.Close(); } public static byte[] ImageToBinary(string _path) { FileStream fS = new FileStream(_path, FileMode.Open, FileAccess.Read); byte[] b = new byte[fS.Length]; fS.Read(b, 0, (int)fS.Length); fS.Close(); return b; } //Convert Binary to imge and save in a folder private void button1_Click_1(object sender, EventArgs e) { DataTable dt = Rimage(); foreach (DataRow row in dt.Rows) { byte[] b = (byte[])row["Pic"]; Image img = BinaryToImage(b); img.Save("D:\\NewFolder\\" + row["ID"].ToString() + ".jpg"); } } private Image BinaryToImage(byte[] b) { if (b == null) return null; MemoryStream memStream = new MemoryStream(); memStream.Write(b, 0, b.Length); return Image.FromStream(memStream); } private DataTable Rimage() { con.ConnectionString = Pic.Properties.Settings.Default.ConnectionS; SqlCommand cmd = new SqlCommand(); cmd.CommandText = "select * from dbo.PicTBL"; cmd.Connection = con; SqlDataAdapter adp = new SqlDataAdapter(cmd); DataTable dt = new DataTable(); con.Open(); adp.Fill(dt); return dt; }