Ho dati binari di un'immagine nel mio database e voglio visualizzarli in un controllo immagine in ASP.NET. Come? Se è impossibile, trova un altro modo per salvarlo nel database e visualizzarlo in un controllo immagine.Conversione da dati binari a controllo immagine in ASP.NET
risposta
Creare un normale elemento HTML img
in questo modo:
<img runat="server" id="image" />
E in code behind fare questo:
image.src = "data:image/png;base64," + Convert.ToBase64String(imageBytes);
Dove imageBytes è un byte[]
.
Hai finito. L'immagine verrà visualizzata.
Questo è di gran lunga il modo più semplice per visualizzare immagini binarie finora. MA ho trovato che questo metodo funziona solo con le immagini jpg. Ho provato questo con le immagini PNG ma non ha funzionato. – Arbaaz
Il metodo funziona su jpg e png finché il browser lo supporta. Può darsi che il tuo browser non lo supporti o che la loro implementazione sia bacata. – Icarus
Puoi spiegare per favore 'data: image/png; base64'? – Arbaaz
In un gestore generico (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);
}
Molto probabilmente l'immagine viene memorizzato come un array di byte nel database. Se è così, allora è possibile utilizzare questo:
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";
}
Utilizzare questo evento per il pulsante click per recuperare immagine e chiamare il metodo Ret_Image
qui.
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;
}
È tutto quello che ho fatto! Divertirsi –
- 1. Conversione immagine da base64
- 2. jetty websockets invia dati binari (immagine)
- 3. Conversione immagine DICOM immagine jpeg a
- 4. Da matrice a immagine a conversione di immagini
- 5. Leggi dati binari da Console.In
- 6. Invia dati binari da Android in Javascript
- 7. ASP.Net - Recupero dati da RepeaterItem
- 8. Caricamento immagine su binari
- 9. Conversione immagine da RGB a spazio di colore HSV
- 10. Utilizzo di dati binari dalla raccolta Mongo come origine immagine
- 11. Dati git e binari
- 12. Crea immagine da dati RGB?
- 13. Conversione da ppm a png
- 14. Caricamento immagine generata da JavaScript a Django
- 15. Conversione da ISBN10 a ISBN13
- 16. Estrai binari da db a file JSON
- 17. Conversione da PDF a UIImage
- 18. Conversione da riga di comando a immagine da riga di comando
- 19. Immagine Captcha - ASP.NET
- 20. Inviare dati binari a un'applicazione RESTful
- 21. Conversione da String a DateTime in PowerShell
- 22. conversione da emf a jpg
- 23. immagine Caricamento in ASP.NET MVC
- 24. Leggere dati binari in panda
- 25. Conversione colonna frame di dati da carattere a numerico
- 26. Dati binari POST Python
- 27. Come creare un oggetto File da dati binari in JavaScript
- 28. Conversione da vuoto * a oggetto in C#
- 29. Come associare un controllo a discesa a un'origine dati in ASP.NET
- 30. da RGB a YCbCr Problemi di conversione
Date un'occhiata alla risposta a questa domanda simile: http://stackoverflow.com/questions/6987433/display-image-from-database-in-asp-net-with-c – IrishChieftain
o questo: http://stackoverflow.com/q/612342/76051 – Carsten