Hej allihopa, Du behöver en asp.net-sida som genererar thumbnails, låt oss kalla den för thumbnail.aspx. ...villket är ganska ineffektivt. Det bästa är om du sparar bilderna som thumbs oxå. och väljer att ladda dessa i gridden. Hej Fredrik, > Är bästa lösningen för det här med bilder (överlag) alltså att göra två bestående versioner av samma bild? En vanlig storlek och en thumbnail? Det blir ju dubbellagring då... Skapa dynamiskt inkl cachning låter som en bra lösning tycker jag. Om du inte har några problem med hdd uttrymme så tycker jag att det allra bästa måste ändå vara att skapa flera kopior i olika storlekar på disken när bilden laddas upp.. skapar du dom "on-the-fly" kommer det ta mycket onödig CPU kraft och cachningen kommer äta minne. Hej,Skapa thumbnails "on-the-fly" och visa i Datagrid
Jag har en datagrid som ser ut så här:
<asp:datagrid id="dg_nights" runat="server" CssClass="formtext" OnPageIndexChanged="bytsida" Width="400" PageSize="15" PagerStyle-Mode="NumericPages" PagerStyle-BorderStyle="solid" PagerStyle-BorderColor="#E6E6E6" PagerStyle-BorderWidth="1" PagerStyle-BackColor="#E6E6E6" HeaderStyle-Font-Size="10px" HeaderStyle-Font-Bold="true" HeaderStyle-BackColor="#E6E6E6" CellSpacing="0" CellPadding="2" BorderWidth="1" BorderColor="#E6E6E6" AllowPaging="true" ToolTip="Klicka för att läsa om vad som hände den kvällen" AutoGenerateColumns="false">
<columns>
<asp:templatecolumn HeaderText="Bild" ItemStyle-Width="330" itemstyle-height="330">
<itemtemplate>
<asp:image ImageUrl='<%# "kvallbilder/" & container.dataitem("kvallbild")%>' runat="server" />
</itemtemplate>
</asp:templatecolumn>
<asp:hyperlinkcolumn headertext="Kvällar" DataNavigateUrlField="kvall_id" DataNavigateUrlFormatString="nights_info.aspx?kvall_id={0}" DataTextField="rubrik" />
<asp:hyperlinkcolumn headertext="Datum" DataTextFormatString="{0:d}" DataNavigateUrlField="kvall_id" DataNavigateUrlFormatString="nights_info.aspx?kvall_id={0}" DataTextField="datum" />
</columns>
</asp:datagrid>
Genom att göra så här har jag lyckats visa mina bilder i templatecolumn. Problemet är att de visar bilderna i dess originalstorlek.
(alla bilder ligger i en folder som heter kvallbilder. Bilderna är namngivna efter vilken kväll de tillhör. I min Access-databas har jag lagrat alla kvällar med ett kvall_id. Och om en bild tillhör kvall_id 85 så heter bilden 85.jpg.
Nu vill jag ju inte visa originalstorlek på bilderna (det är ju så nu dock). Utan jag vill skapa thumbnails "on-the-fly" och sedan visa dem i datagrid:en.
Är det någon som vet hur jag lyckas med det?
Tack på förhad,
//mvh Bjorn
Sv: Skapa thumbnails "on-the-fly" och visa i Datagrid
Genom att anropa den med olika querystring-parametrar kan du få tillbaka en thumbnail, t.ex:
thumbnail.aspx?bild=85.jpg&maxwidth=150
I koden för thumbnail.aspx gör du på följande sätt för att leverera en bild till response-strömmen:
' thumbnail.aspx
' in: bild - bildens filnamn
' in: maxwidth - bildens tilltänkta bredd
Dim objThumbnail As System.Drawing.Image
' ..kod som laddar in den valda bilden och förminskar den proportionerligt..
Response.ContentType = "image/jpeg"
objThumbnail.Save(Response.OutputStream, Imaging.ImageFormat.Jpeg)
I din datagrid kan du sedan integrera den genom att t.ex ställa img src URL:en till:
<img src="thumbnail.aspx?bild=85.jpg&maxwidth=150">
Sv:Skapa thumbnails "on-the-fly" och visa i Datagrid
Sv: Skapa thumbnails "on-the-fly" och visa i Datagrid
Vad menar du med att det är ineffektivt? Är det för att den andra sidan måste anropas hela tiden för att skapa thumbnails...? Kommer sidan därmed bli segladdad?
Är bästa lösningen för det här med bilder (överlag) alltså att göra två bestående versioner av samma bild? En vanlig storlek och en thumbnail? Det blir ju dubbellagring då...
Men det kanske inte går att göra smartare!
//mvh BjörnSv:Skapa thumbnails "on-the-fly" och visa i Datagrid
Ett alternativ är att du cachar bilden vid skapandet av första thumbnailen, men det är inte särskilt effektivt det heller... Men det fungerar.
Det bästa lär nog vara att ha en thumbnail på disk (som du ev. skapar från asp.net)Sv: Skapa thumbnails "on-the-fly" och visa i Datagrid
Sv:Skapa thumbnails "on-the-fly" och visa i Datagrid
jag har en sida med i dagsläget ca 30.000 bilder, jag skapar fyra kopior av varje bild när dem laddas upp.
thumbnails kopiorna till dessa bilder tar nu upp ca 60Mb på disk vilket jag inte tycker är dyrt i jämförelse..Sv: Skapa thumbnails "on-the-fly" och visa i Datagrid
Körde på Jimmies lösning!
Tack alla för hjälpen! //mvh Björn