Hjælp til billeder fra database
Jeg er ved at lave en side hvor jeg vil prøve at opbevare min billeder i en database i stedet for på filsystemet. I den forbindelse er der opstået nogle spørgsmål:1. Er det ikke muligt at publicere billederne så man kan gemme dem ved at højre klikke og vælge "Gem billede som"
2. Jeg resizer billerne "on the fly" men kan se at det belaster min maskine en del, hvordan bør jeg håndtere dette?
3. Min resize funktion skal gerne kunne håndtere alle billede formater, men i følgende linie skal man opgive et format billedet skal "gemmes" i:
bmpOut.Save(resultStream, System.Drawing.Imaging.ImageFormat.Jpeg);
kan jeg på nogen måde se af min Byte[] hvilket format billedet har?
jeg bruger følgende kode i min "ImageServer"(Tyv stjålet fra snepnet):
protected void Page_Load(object sender, EventArgs e)
{
SqlConnection connection = new SqlConnection(ConfigurationManager.ConnectionStrings["connStr"].ConnectionString);
SqlCommand command = new SqlCommand("select type, billede from billeder where billedeid = " + Request.QueryString["ImageId"], connection);
connection.Open();
SqlDataReader dr = command.ExecuteReader();
if (dr.Read())
{
Response.ContentType = dr["type"].ToString();
Response.BinaryWrite(ResizeImage((byte[])dr["billede"],800,0));
}
connection.Close();
}
public static byte[] ResizeImage(byte[] image, int width, int height)
{
System.Drawing.Bitmap bmpOut = null;
try
{
Bitmap bmp = new Bitmap(new MemoryStream(image));
if (height == 0)
{
double tmpHeight = ((double)bmp.Height / (double)bmp.Width) * width;
height = (int)tmpHeight;
}
if (width == 0)
{
double tmpWidth = ((double)bmp.Width / (double)bmp.Height) * height;
width = (int)tmpWidth;
}
bmpOut = new Bitmap(width, height);
Graphics g = Graphics.FromImage(bmpOut);
g.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
g.DrawImage(bmp, 0, 0, width, height);
bmp.Dispose();
// og så lige tilbage til byte[]
MemoryStream resultStream = new MemoryStream();
bmpOut.Save(resultStream, System.Drawing.Imaging.ImageFormat.Jpeg);
byte[] result = resultStream.ToArray();
bmpOut.Dispose();
return result;
}
catch
{
return null;
}
}