2011-09-12 44 views
10

Tôi có dữ liệu nhị phân của một hình ảnh trong cơ sở dữ liệu của mình và tôi muốn hiển thị nó trong một điều khiển hình ảnh trong ASP.NET. Làm sao? Nếu không thể, hãy tìm một cách khác để lưu nó trong cơ sở dữ liệu và hiển thị nó trong một điều khiển hình ảnh.Chuyển đổi từ dữ liệu nhị phân sang điều khiển hình ảnh trong ASP.NET

+2

Hãy xem câu trả lời cho câu hỏi tương tự này: http://stackoverflow.com/questions/6987433/display-image-from-database-in-asp-net-with-c – IrishChieftain

+0

hoặc cái này: http://stackoverflow.com/q/612342/76051 – Carsten

Trả lời

29

Tạo một phần tử HTML img thường xuyên như vậy:

<img runat="server" id="image" /> 

Và trong code behind làm điều này:

image.src = "data:image/png;base64," + Convert.ToBase64String(imageBytes); 

đâu imageBytes là một byte[] .

Bạn đã hoàn tất. Hình ảnh sẽ được hiển thị.

+0

Đây là cách dễ nhất để hiển thị hình ảnh nhị phân cho đến nay. NHƯNG tôi thấy rằng phương pháp này chỉ hoạt động với hình ảnh jpg. Tôi đã thử điều này với hình ảnh png nhưng nó không hoạt động. – Arbaaz

+0

Phương thức hoạt động trên jpg và png miễn là trình duyệt hỗ trợ nó. Nó có thể là trình duyệt của bạn không hỗ trợ nó hoặc việc thực thi của họ là lỗi. – Icarus

+0

Bạn có thể giải thích 'dữ liệu: hình ảnh/png; base64' không? – Arbaaz

1

Trong một handler generic (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); 


        } 
4

Nhiều khả năng hình ảnh đang được lưu trữ như là một mảng byte trong cơ sở dữ liệu. Nếu vậy, sau đó bạn có thể sử dụng này:

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; 
} 
1
public Byte[] Ret_image(Int32 id) 
{ 
    SqlCommand cmd = new SqlCommand(); 
    cmd.CommandText = "select * from tbimage where [email protected]"; 
    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; 
} 
1
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";   
} 

Sử dụng sự kiện này cho nút bấm để lấy hình ảnh và gọi phương thức Ret_Image đây.

0
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; 
} 
+0

Đó là tất cả những gì tôi đã làm! Hãy tận hưởng nó –

Các vấn đề liên quan