webForumDet fria alternativet

thumnails... i C#

.NET

16 svar · 981 visningar · startad av Bjuris

Medlem sedan juli 2001514 inlägg
Frågan#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();
Medlem sedan sep. 20026 425 inlägg
#2

Genererar du nu en tumnagel för varje sidvisning eller har du tumnaglar som du skapar en gång och lagrar på servern sen?

Medlem sedan juli 2001514 inlägg
#3

För varje visning.

Medlem sedan sep. 20026 425 inlägg
#4

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

Medlem sedan juli 2001514 inlägg
#5

ok.
Hur skall man skapa tummarna då?
Det är ju fredag, jag får i varje fall bara små kryssbilder...

Medlem sedan sep. 20026 425 inlägg
#6

Har du läst artikeln jag länkade till? Där står det mesta skrivet bra. :)

Medlem sedan juli 2001514 inlägg
#7

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);

Medlem sedan sep. 20026 425 inlägg
#8

Jag tror att det har att göra med sökvägen du lagrar i databasen. Kan du visa oss all ämnesrelaterad kod? :)

Medlem sedan juli 2001514 inlägg
#9

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

}
Medlem sedan sep. 20011 914 inlägg
#10

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;
   }
}
Medlem sedan juli 2001514 inlägg
#11

får fortfarande ett rött kryss, vad gör jag för fel?

Medlem sedan juli 2001514 inlägg
#12

nu skäms jag, men *bump* *bump*

Medlem sedan sep. 20011 914 inlägg
#13

Hur värdet av Server.MapPath(Request.QueryString["file"]) ut. Kan ju vara fel där.

Medlem sedan juli 2001514 inlägg
#14

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)

Medlem sedan dec. 19996 721 inlägg
#15

Kolla på själva bild-URL:en direkt. Felmeddelande?

Medlem sedan juli 2001514 inlägg
#16

Det är det som är det jäkliga... får inget felmess utan själva koden verkar fungera finfint.

Medlem sedan juli 2001514 inlägg
#17

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 :)

268 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
125 ms — deklarationer (db)
0 ms — hämta statistik (cache)
139 ms — hämta tråd, inlägg och bilagor (db)
122 ms — ändringar (db)