28. november 2005 - 22:58Der er
12 kommentarer og 2 løsninger
Billed resize med GDlib
Jeg har søgt lidt (læs: Meget!) efter emnet, men jeg kan absolut intet brugbart finde - Jeg ser kun en masse kryptiske koder, jeg intet ved hvad jeg skal gøre ved...
Sagen er, at jeg har et billedgalleri. Billederne henter jeg fra en sql database.
Billederne har jeg altså, men nu vil jeg gerne have en side der viser thumbnails af billederne. Denne side er også lavet, men thumbnails'ne har jeg siddet og resized i photoshop manuelt, hvilket jo ikke duer i længden, og slet ikke hvis jeg også vil have et upload-script.
Så GDlib strejfede mig, men jeg har ingen idé hvordan jeg bruger det...
Så mit spørgsmål er: Hvordan kan jeg hente et billede ned fra min database, og derefter resize det "on the fly"?
Scriptet har i her:
billed.php (Filen med oversigt over billederne der skal resizes)
<? // Du kan bruge de oprindelige kommandoer ved at udfylde // felterne og fjerne kommentarene. $db = mysql_connect("localhost", "xxxxx", "xxxxx"); mysql_select_db("xxxxx", $db); ?> <? // Hvis der ikke er valgt noget fra start $order = $_GET['order']; if ($order == "") $order = "dato"; ?> <? // Hvis der ikke er valgt noget fra start $sec = $_GET['sec']; if ($sec == "") $sec = "DESC"; ?> <table cellspacing=0 cellpadding=0 class="spectext" width="583"> <tr> <td class="spectext" width="583" align="center"><h1><font size="2">Ferrari billeder</font></h1></td> </tr> <tr> <td height="10"></td> </tr> <tr> <td width="583" class="spectext"> <table cellspacing=0 cellpadding=0> <tr><?php $offset = (isset($_GET['offset'])) ? $_GET['offset'] : 0; // Hvis ikke $offset er sat, sættes den til 0 $pr_side = 9; // Antal resultater pr. side
// Henter poster fra databasen $query = mysql_query("SELECT * FROM tabel ORDER BY id DESC LIMIT $offset,$pr_side") or die (mysql_error()); $i = 1; while($data = mysql_fetch_array($query)) { ?> <td width="194" class="spectext" align="center"><? echo "<b><a href=billed_ex.php?id=". $data["id"] ." title='" . $data["titel"] . "' border=0>" . "<img src=" . $data["screen"] . " border=0>" . "</a></b>"; ?><br><b><? echo $data["titel"]; ?></b><br></td>
<? if(($i%3) == 0) { echo"</tr><tr>"; } $i++; }
while(($i%3) != 0) { echo"<td> </td>"; $i++; } ?> <tr><td> <?php // Tæller antal poster i databasen $antal = mysql_result(mysql_query("SELECT COUNT(*) FROM img_vid_db"),0);
Generelt ville jeg ofre diskpladsen til thumbnail billeder fremfor at generere billederne on-the-fly. Det kunne give serveren overflødigt ekstraarbejde / gøre den alt for tung i perioder.
GDlib virker fint hvis du ikke kommer ud for billedstørrelser der er større end datamængden PHP kan arbejde med. Normalt er den sat til 8 Mb data - og fylder din kode og billedet + det genererede thumbnail mere end 8 Mb til sammen, så er løsningen ikke GDlib - med mindre du har mulighed for at påvirke den størrelse på anden måde.
Jeg ville lave et thumbnail script. Når den støder på et billede som ikke ahr thumbnail, så kunne den oprette det og gemme det på disken! Så ville det ligge der til næste gang, dermed minimere du on-the-fly resizingen! (den vil kun ske på nye pics som endnu ikke er resizet og kun 1 gang)
Jeg bruger en meget langsom webserver, og laver derfor altid thumbnails sådan her: ls *.JPG | xargs -iq convert q -thumbnail 320x200 thumb_q Det tager naturligvis sin tid at komme igennem et par hundrede billeder, men derefter går det jo hurtigt at vise dem.
Tak for jeres svar allesammen, fedt at se at i gidder at tage jer tid! (misforstå mig nu ikke ;) )
kammeyer - Kan godt se din pointe, men for mig holder det bare ikke i længden. Og da jeg også arbejdet på et upload-script, kan det jo ikke lade sig gøre :)
Caspers og jakobdo - ja, nu står jeg så i den situation, som jeg forklarede ovenfor - Dér hvor jeg ser en masse kode, jeg ikke ved hvad jeg skal gøre af. Jeg vil meget gerne have givet jer pointene, men jeg ved ikke hvad jeg skal gøre herfra... Help? :)
Du beder dem som har hjulpet dig lægge et svar! Når de så har svaret, kan du acceptere dem og give dem point. Hvis du arbejder på et upload-script, så er det nemmeste at resize i upload processen.
Jeg har dog også lavet et script som resizer engang for alle, når billedet bliver forsøgt vist første gang, det må du også gerne se.
"Du beder dem som har hjulpet dig lægge et svar! Når de så har svaret, kan du acceptere dem og give dem point." Jeg kan jo ikke give point når jeg ikke har forstået svaret fuldt ud,, vel?! ;)
Tak for det... Men jeg får resultatet i min browser:
Vi har ikke uploadet nogle billeder endnu, de kommer... Fatal error: Cannot redeclare resize() (previously declared in xxxxxxx:17) in xxxxxxxxxxx on line 17
Har prøvet at skifte $dir = getcwd(); ud med forskellige ting, men uden held. Hvad gør jeg når billedet skal hesntes fra databasen?
Det strider lidt med mine principper, så derfor får caspers ½-delen af pointene... Håber ikke at folk bliver sure :)
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.