B Bjuris Medlem sedan juli 2001 514 inlägg Frågan 10 mars 2006 12:52 #1 Hittade en gammal klass som genererar bilder hämtade från en databas.
Har egentligen bara ett problem och det är att jag skulle vilja göra om så att jag kan siza om bilderna, men jag vet inte riktigt hur jag skall implementera detta.
Kodexempel som jag hittade och som för övrigt fungerar klockrent verkar inte använda sig av Outputstream på samma vis som jag, är det någon som kan hjälpa mig?
string SQL = "SELECT FileSize, FileData, ContentType FROM tblFile WHERE FileID = " + FileID.ToString();
OleDbCommand dbComm = new OleDbCommand(SQL, dbConn);
OleDbDataReader dbRead = dbComm.ExecuteReader();
dbRead.Read();
HttpContext.Current.Response.Clear();
HttpContext.Current.Response.ContentType = (string)dbRead["ContentType"];
HttpContext.Current.Response.OutputStream.Write((byte[])dbRead["FileData"], 0, (int)dbRead["FileSize"]);
HttpContext.Current.Response.End();
Genererar du nu en tumnagel för varje sidvisning eller har du tumnaglar som du skapar en gång och lagrar på servern sen?
Det är jättedumt för det tar en del kraft att skapa tumnaglar. Skapa tumnagel en gång, spara på disken och sökväg i databasen, skriv sen ut sökvägen.
Ta en titt på denna artikel och implementera den i ditt script: http://blogs.msdn.com/kaevans/archive/2003/07/02/9608.aspx
B Bjuris Medlem sedan juli 2001 514 inlägg ok.
Hur skall man skapa tummarna då?
Det är ju fredag, jag får i varje fall bara små kryssbilder...
Har du läst artikeln jag länkade till? Där står det mesta skrivet bra. :)
B Bjuris Medlem sedan juli 2001 514 inlägg japp har läst och fixat koden, men fortfarande inga småbilder.
När jag klickar på det röda krysset så får jag ett nytt fönster och där visas den stora bilden.
måste vara något knas :
thumbNail.Save(Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg);
Jag tror att det har att göra med sökvägen du lagrar i databasen. Kan du visa oss all ämnesrelaterad kod? :)
B Bjuris Medlem sedan juli 2001 514 inlägg Tänkte att jag skulle skippa databasen helt och hållet, det är egentligen ganska onödigt då det inte skall vara någon text till bilderna utan dem skall bara visas.
På så sätt så kunde jag använda hans lösning nästan helt ut.
Filerna ligger i projektrooten samt att bildena ligger där också.
Här kommer då all ämnesrelaterad kod: :e
galleri.aspx
<ItemTemplate >
<asp:HyperLink Runat='server' ImageUrl='<%# string.Concat("MakeThumbNail.aspx?file=",DataBinder.Eval(Container.DataItem,"Name")) %>'
NavigateUrl='<%# DataBinder.Eval(Container.DataItem,"Name") %>' ID="Hyperlink1"></asp:HyperLink>
</ItemTemplate>
Galleri.aspx.cs
System.IO.DirectoryInfo dir = new System.IO.DirectoryInfo(Server.MapPath("."));
DataList1.DataSource = dir.GetFiles("*.jpg");
DataList1.DataBind();
MakethumbNail.aspx
<%@ Page language="c#" CodeFile="MakeThumbnail.aspx.cs" AutoEventWireup="false" Inherits="MakeThumbNail" %>
makethumbnail.aspx.cs
public partial class MakeThumbNail : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
System.Drawing.Image.GetThumbnailImageAbort myCallback = new System.Drawing.Image.GetThumbnailImageAbort(ThumbnailCallback);
System.Drawing.Image image = System.Drawing.Image.FromFile(Server.MapPath(Request.QueryString["file"]));
Response.Write(Server.MapPath(Request.QueryString["file"])+"TEST");
System.Drawing.Image thumbNail = image.GetThumbnailImage(100, 80, myCallback, IntPtr.Zero);
Response.ContentType = "image/jpeg";
thumbNail.Save(Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg);
image.Dispose();
thumbNail.Dispose();
}
public bool ThumbnailCallback()
{
return false;
}
}
D Dino Medlem sedan sep. 2001 1 914 inlägg makethumbnail.aspx.cs
public partial class MakeThumbNail : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
Bitmap bmap = null;
Image img = System.Drawing.Image.FromFile(Server.MapPath(Request.QueryString["file"]));
bmap = this.Resize(img, 100, 80);
Response.ContentType = "image/jpeg";
bmap.Save(Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg);
bmap.Dispose();
}
private Bitmap Resize(System.Drawing.Image image, int width)
{
int height = (int) (width * ((double) image.Height / (double) image.Width));
return Resize(image, width, height);
}
private Bitmap Resize(System.Drawing.Image image, int width, int height)
{
Bitmap bitmap = new Bitmap(width, height);
bitmap.SetResolution(image.HorizontalResolution, image.VerticalResolution);
using(Graphics graphics = Graphics.FromImage(bitmap))
{
graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;
graphics.DrawImage(image,
new Rectangle(0, 0, width, height),
new Rectangle(0, 0 ,image.Width, image.Height),
GraphicsUnit.Pixel);
}
image.Dispose();
return bitmap;
}
}
B Bjuris Medlem sedan juli 2001 514 inlägg får fortfarande ett rött kryss, vad gör jag för fel?
B Bjuris Medlem sedan juli 2001 514 inlägg nu skäms jag, men *bump* *bump*
D Dino Medlem sedan sep. 2001 1 914 inlägg Hur värdet av Server.MapPath(Request.QueryString["file"]) ut. Kan ju vara fel där.
B Bjuris Medlem sedan juli 2001 514 inlägg Server.MapPath fungerar som den skall och visar rätt.
Om jag klickar på min thumbnail (som inte genereras) så dyker min vanliga bild upp (jag använder samma sökväg till båda)
E emission Medlem sedan dec. 1999 6 721 inlägg Kolla på själva bild-URL:en direkt. Felmeddelande?
B Bjuris Medlem sedan juli 2001 514 inlägg Det är det som är det jäkliga... får inget felmess utan själva koden verkar fungera finfint.
B Bjuris Medlem sedan juli 2001 514 inlägg Har kollat runt lite och blir lite fundersam om det är något liknanade som ett gamalt inlägg: http://www.webforum.nu/showthread.php?t=96278&highlight=thumbnail
Någon som kanske har något input om att det är något som inte är kompatibelt med bildhantering?
Använde lightbox, men har plockat bort den för att "undersöka" men den var oskyldig :)