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
Trả lời
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ị.
Đâ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
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
Bạn có thể giải thích 'dữ liệu: hình ảnh/png; base64' không? – Arbaaz
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);
}
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;
}
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;
}
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.
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;
}
Đó là tất cả những gì tôi đã làm! Hãy tận hưởng nó –
- 1. T-SQL - Chuyển đổi dữ liệu nhị phân sang/từ Base64 (hoặc biểu diễn chuỗi khác)
- 2. Chuyển đổi hình ảnh thành nhị phân?
- 3. Chuyển đổi dữ liệu nhị phân thành base64 bằng javascript
- 4. chuyển đổi dữ liệu nhị phân nhanh trong Python
- 5. chuyển từ điển sang bộ điều khiển asp.net mvc
- 6. Chuyển đổi nhị phân màu xám nguyên sang JPEG
- 7. Chuyển đổi số thập phân sang nhị phân trong python
- 8. Chuyển đổi tệp nhị phân thành hình ảnh
- 9. Chuyển đổi điều khiển WPF (XAML) sang tài liệu XPS
- 10. Chuyển đổi dữ liệu hàng thành cột nhị phân
- 11. Làm cách nào để chuyển dữ liệu từ bộ điều khiển xem chi tiết sang uitableview?
- 12. Chuyển dữ liệu nhị phân làm đối số trong bash
- 13. PHP: nhị phân dữ liệu hình ảnh, kiểm tra các loại hình ảnh
- 14. Làm cách nào để chuyển đổi dữ liệu thập lục phân của dữ liệu sang dữ liệu nhị phân trong PHP?
- 15. Cách chuyển dữ liệu từ hoạt động sang phân đoạn
- 16. Cách chuyển dữ liệu từ WebView sang bộ điều khiển và ngược lại trong JavaFX
- 17. Đọc dữ liệu nhị phân từ Console.In
- 18. Chuyển đổi từ nhị phân thành char trong C
- 19. Chuyển đổi tệp PDF sang hình ảnh
- 20. Chuyển đổi hình ảnh .jpg sang .png
- 21. Tạo một hình ảnh chuyển đổi AJAX trong ASP.NET MVC
- 22. Chuyển đổi dữ liệu từ nhiều hàng sang nhiều cột
- 23. Chuyển đổi base64 sang Hình ảnh trong C#
- 24. chuyển dữ liệu từ bộ điều khiển đến Loại symfony2
- 25. Di chuyển trở lại từ Bộ điều khiển sang một bộ điều khiển trước
- 26. Java - Chuyển đổi hình ảnh sang Base64
- 27. URI dữ liệu so với nhị phân trong cơ sở dữ liệu
- 28. Chuyển đổi hình ảnh Base64 thành nhị phân thô với Node.js
- 29. Chuyển đổi tệp .html sang hình ảnh
- 30. Truyền dữ liệu từ Bộ điều khiển MVC sang Chế độ xem trong PHP
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
hoặc cái này: http://stackoverflow.com/q/612342/76051 – Carsten