Erik B. Skrevet 3. september 2006 Del Skrevet 3. september 2006 Hei, jobber med å uttvikle et ultra enkelt bildegalleri. Jeg leter etter en kode som åpner en mappe med bilder i som kun består av bilder og skriver ut innholdet, slik at alle bildene i mappen vises. Ikke tenk på thumbnails og slikt, det ordner jeg selv på et vis Takker masse for hjelp! Lenke til kommentar
Jesper Karsrud Skrevet 3. september 2006 Del Skrevet 3. september 2006 Jeg skrev denne for en stund siden.. Den lager thumbnails også, så slipper du å loke noe med det også <?php // Sti til mappe med bilder $path = "images/flickr"; // Gruppen med bilder (Er for å gjøre "prev" og "next" brukbart i lightboxen) $group = "flickr"; // Scanner mappe for bilder $files = "0"; $handle = opendir($path); while ($file = readdir($handle)) { if (!is_dir($path."/".$file) && $file != "." && $file != "..") { $extension = explode(".", $file); $extension_i = (count($extension) - 1); $ext = $extension[$extension_i]; if ($ext == "jpg" || $ext == "jpeg" || $ext == "JPG" || $ext == "JPEG") { $images[$files] = $file; $files++; } } } sort($images); // Sorterer bilder etter navn, usort et alternativ til annen sortering echo "<div id=\"galleri\">\n"; echo "<p>Det er $files bilder i galleriet</p>\n"; echo "<ul>\n"; foreach ($images as $image) { // Lag thumbnails $source = $path."/".$image; $thumbsource = $path."/"."thumbs/".$image; $thumbheight = "100"; $quality = "80"; // Jmf. kvalitet i Photoshop * 10 if (file_exists($source) && !file_exists($thumbsource)) { $size = getimagesize($source); $width = round($size[0]/($size[1]/$thumbheight)); $height = $thumbheight; $resize = imagecreatetruecolor($width, $height); switch ($size['mime']) { // Hvis kildefil er JPG/JPEG: case 'image/jpeg': $im = imagecreatefromjpeg($source); imagecopyresampled($resize, $im, 0, 0, 0, 0, $width, $height, $size[0], $size[1]); imagejpeg($resize, $path.'/thumbs/'.$image, $quality); break; // Hvis kildefil er PNG: case 'image/png': $im = imagecreatefrompng($source); imagecopyresampled($resize, $im, 0, 0, 0, 0, $width, $height, $size[0], $size[1]); imagepng($resize, $path.'/thumbs/'.$image, $quality); break; } imagedestroy($im); } echo "<li><a href=\"$source\" rel=\"lightbox[$group]\"><img src=\"$thumbsource\" alt=\"$image\"></a></li>\n"; } echo "</ul>\n"; echo "</div>\n"; ?> Høres ut som noe som passer bra for deg. Er også klargjort for Lightbox 2, som jeg så du spurte etter i WDS-delen Lenke til kommentar
Erik B. Skrevet 4. september 2006 Forfatter Del Skrevet 4. september 2006 Får bare opp følgende når jeg bruker scriptet ditt: Warning: sort() expects parameter 1 to be array, null given in C:\Programfiler\xampp\htdocs\erixzone1\ehe.php on line 26 Det er 0 bilder i galleriet Warning: Invalid argument supplied for foreach() in C:\Programfiler\xampp\htdocs\erixzone1\ehe.php on line 30 Hva mer enn å endre path og group må gjøres da? Lenke til kommentar
Gjest Slettet+142 Skrevet 4. september 2006 Del Skrevet 4. september 2006 (endret) Får bare opp følgende når jeg bruker scriptet ditt: Warning: sort() expects parameter 1 to be array, null given in C:\Programfiler\xampp\htdocs\erixzone1\ehe.php on line 26 Det er 0 bilder i galleriet Warning: Invalid argument supplied for foreach() in C:\Programfiler\xampp\htdocs\erixzone1\ehe.php on line 30 Hva mer enn å endre path og group må gjøres da? 6800746[/snapback] <?php // Sti til mappe med bilder $path = "images/flickr"; // Gruppen med bilder (Er for å gjøre "prev" og "next" brukbart i lightboxen) $group = "flickr"; // Scanner mappe for bilder $files = "0"; $handle = opendir($path); while ($file = readdir($handle)) { if (!is_dir($path."/".$file) && $file != "." && $file != "..") { $extension = explode(".", $file); $extension_i = (count($extension) - 1); $ext = $extension[$extension_i]; if ($ext == "jpg" || $ext == "jpeg" || $ext == "JPG" || $ext == "JPEG") { $images[$files] = $file; $files++; } } } if(count($images)>0) sort($images); // Sorterer bilder etter navn, usort et alternativ til annen sortering echo "<div id=\"galleri\">\n"; echo "<p>Det er $files bilder i galleriet</p>\n"; echo "<ul>\n"; if(count($images)>0) { foreach ($images as $image) { // Lag thumbnails $source = $path."/".$image; $thumbsource = $path."/"."thumbs/".$image; $thumbheight = "100"; $quality = "80"; // Jmf. kvalitet i Photoshop * 10 if (file_exists($source) && !file_exists($thumbsource)) { $size = getimagesize($source); $width = round($size[0]/($size[1]/$thumbheight)); $height = $thumbheight; $resize = imagecreatetruecolor($width, $height); switch ($size['mime']) { // Hvis kildefil er JPG/JPEG: case 'image/jpeg': $im = imagecreatefromjpeg($source); imagecopyresampled($resize, $im, 0, 0, 0, 0, $width, $height, $size[0], $size[1]); imagejpeg($resize, $path.'/thumbs/'.$image, $quality); break; // Hvis kildefil er PNG: case 'image/png': $im = imagecreatefrompng($source); imagecopyresampled($resize, $im, 0, 0, 0, 0, $width, $height, $size[0], $size[1]); imagepng($resize, $path.'/thumbs/'.$image, $quality); break; } imagedestroy($im); } echo "<li><a href=\"$source\" rel=\"lightbox[$group]\"><img src=\"$thumbsource\" alt=\"$image\"></a></li>\n"; } } echo "</ul>\n"; echo "</div>\n"; ?> har endre koden over, så prøv den.. har lagt til "if(count($images)>0) " to steder rundt sort($images);, og rundt foreach. utestet, men håper på at noen kan finpusse litt på den Endret 4. september 2006 av Slettet+142 Lenke til kommentar
Erik B. Skrevet 4. september 2006 Forfatter Del Skrevet 4. september 2006 Nå forsvant feil meldingene Men jeg får ikke opp noen bilder. Står forsatt "Det er 0 bilder i galleriet". (Jeg har kontrollert om jeg har angitt riktig bane ja) Lenke til kommentar
Jesper Karsrud Skrevet 4. september 2006 Del Skrevet 4. september 2006 Har du CHMOD'et mappen thumbs til 777 da? Jeg bruker nøyaktig den koden der på en annen side, og det fungerer helt fint Lenke til kommentar
Erik B. Skrevet 4. september 2006 Forfatter Del Skrevet 4. september 2006 Hvilke mapper må jeg egentlig lage for at det skal funke? Kan du nevne dem jeg må lage? Lenke til kommentar
Jesper Karsrud Skrevet 4. september 2006 Del Skrevet 4. september 2006 Du trenger en mappe som defineres i $path. Inni denne mappen trenger du enda en mappe som heter thumbs. Denne må du ha lese- og skriverettigheter til. Så legger du alle bildene i mappen du definerer i $path, og thumbnails blir laget automatisk i mappen thumbs.. Skal ikke være vanskeligere enn det, men hvis du støter på flere problemer, er det bare å si ifra Lenke til kommentar
Erik B. Skrevet 4. september 2006 Forfatter Del Skrevet 4. september 2006 Får det ikke til jeg. Slik er oppsettet nå path og group er satt til mappen "bilder". ($path="bilder"; $group="bilder" På serveren min har jeg en fil som heter bilder.php, her står all koden. På samme sted har jeg en mappe som heter "bilder". Her ligger det et bilde. Det ligger også en mappe som heter "thumbs" i "bilder" mappen. Denne mappen er chmod'et til 777, alle rettigheter. Hva er galt? Lenke til kommentar
Svish Skrevet 5. september 2006 Del Skrevet 5. september 2006 (endret) skrev dette for litt siden: <?php // rekursiv scanning for filer i $dir function scan($dir) { $list = array(); if($dh = opendir($dir)) { while(false !== ($file = readdir($dh))) { if($file != '.' && $file != '..') { if(is_dir($dir . '/' . $file)) { $list = array_merge($list, scan($dir . '/' . $file)); } else { $list[] = $dir . '/' . $file; } } } closedir($dh); } return $list; } ?> den finner filer rekursivt i en mappe. altså i mappen og undermapper. kan for eksempel brukes slik jeg gjør: $lovlige = array(".jpg", ".jpeg", ".png", ".gif"); // extensions som den skal liste opp $resultat = scan("galleri"); foreach($resultat as $bilde) { if(in_array(strrchr($bilde, "."), $lovlige)) { echo img tagger eller linker eller whatever } } Endret 5. september 2006 av Tussi_qwerty Lenke til kommentar
Erik B. Skrevet 5. september 2006 Forfatter Del Skrevet 5. september 2006 Fant ut det letteste var å lage det selv. Jeg har nå laget en kode som skriver ut bildene som ligger i en mappe. Det jeg lurer på nå, er hvordan man kan gjøre slik at det lages thumbnails. Jeg har sett litt på funksjonen imagecopyresized og får til å lage ny størrelse på bilder ved hjelp av dette. Men denne funksjonen gjør bare at bildet blir mindre i selve filen, jeg vil at bildet som genereres ved hjelp av denne funksjonen skal lagres som et nytt bilde. Hvordan? Lenke til kommentar
Knebba Skrevet 5. september 2006 Del Skrevet 5. september 2006 (endret) aldri gjort det selv, men du kan jo bruke copy() for så å resize den kopierte fila.. Endret 5. september 2006 av kennteh Lenke til kommentar
Svish Skrevet 5. september 2006 Del Skrevet 5. september 2006 (endret) Ikke tenk på thumbnails og slikt, det ordner jeg selv på et vis Det jeg lurer på nå, er hvordan man kan gjøre slik at det lages thumbnails.Jeg har sett litt på funksjonen imagecopyresized og får til å lage ny størrelse på bilder ved hjelp av dette. riktig... det kaller jeg å ordne det selv på et vis men hvis du vil vite måten jeg gjør det på, så er det følgende: putter koden under i en php fil kaldt thumbnail.php eller no sånt. og i galleriet har jeg noe sånt som: <a href="bilde.jpg"><img src="thumbnail.php?file=bilde.jpg" alt="" /></a> de linkene med bilde inni genereres dynamisk ut fra den listen du tydeligvis klarte å lage selv... <?php /** * Thumbnail **/ if( isset($_GET['file']) && strpos($_SERVER['HTTP_REFERER'], $_SERVER['HTTP_HOST'])) { $file = $_GET['file']; // get filename $size = getimagesize($file); // get size $ext = strrchr($file, '.'); // extension if(filetype($file)=="file" && $size) { // Calculate size $width = 160; $height = 120; $w = $size[0]; $h = $size[1]; if ($w < $h) { $width = ($height / $h) * $w; } // portrait else if ($h < $w) { $height = ($width / $w) * $h; } // landscape else { $width = 120; } // square // Create empty thumbnail $new = imagecreatetruecolor($width, $height); // Get source image if($ext == ".jpg" || $ext == ".jpeg"): $image = imagecreatefromjpeg($file); elseif($ext == ".png"): $image = imagecreatefrompng($file); elseif($ext == ".gif"): $image = imagecreatefromgif($file); else: header("HTTP/1.1 400 Bad Request"); exit; endif; // Resize image into thumbnail imagecopyresampled($new, $image, 0, 0, 0, 0, $width, $height, imagesx($image), imagesy($image)); imagedestroy($image); // Output and exit header('Content-type: image/jpeg'); imagejpeg($new, null, 80); exit; } } ?> Endret 5. september 2006 av Tussi_qwerty Lenke til kommentar
Jesper Karsrud Skrevet 5. september 2006 Del Skrevet 5. september 2006 Vil hevde det er litt dumt å gi bildene fast bredde og høyde, egentlig.. Én av delene derimot, det tror jeg gjør seg veldig bra, og der er vel forsåvidt det beste å definere en height: $thumbheight = "100"; $size = getimagesize(bilde; $width = round($size[0]/($size[1]/$thumbheight)); $height = $thumbheight; $resize = imagecreatetruecolor($width, $height); Selv om det der står i skriptet mitt lenger oppe i tråden.. Men det fører i hvertfall til at thumbnails aldri får variabel høyde eller bredde, fordi bredden beregnes utfra høyden på bildet uansett Lenke til kommentar
Svish Skrevet 6. september 2006 Del Skrevet 6. september 2006 men altså, om du leser koden min litt nøyere så får de ikke fast størrelse heller da den går etter størrelsen 160*120, og resizer den så den passer inn i den. med andre ord, hvis det er et landscape bilde så vil 160 være bredden mens høyden vil være mindre. hvis det er et portrait vil 120 være høyden mens bredden vil være mindre. er ikke værre enn det! (og bare for å være pirkete, om du beregner bredden utfra høyden så vil da bredden være ganske så variabel vil den ikke?) Lenke til kommentar
Jesper Karsrud Skrevet 6. september 2006 Del Skrevet 6. september 2006 Leste litt mer gjennom koden din, og ser hva du mener, bare jeg som ikke så på annet enn width og height, og at de var faste størrelser.. My bad Lenke til kommentar
endrebjo Skrevet 6. september 2006 Del Skrevet 6. september 2006 (endret) Det jeg lurer på nå, er hvordan man kan gjøre slik at det lages thumbnails.Jeg har sett litt på funksjonen imagecopyresized og får til å lage ny størrelse på bilder ved hjelp av dette. Men denne funksjonen gjør bare at bildet blir mindre i selve filen, jeg vil at bildet som genereres ved hjelp av denne funksjonen skal lagres som et nytt bilde. Hvordan? 6808151[/snapback] Når du sender output med imagejpeg() kan du spesifisere et filnavn den skal lagre til. imagejpeg($resource, $filename, $quality); Filnavn og kvalitet er valgfrie. imagejpeg($resource); imagejpeg($resource, $filename); imagejpeg($resource, NULL, $quality); $quality er et heltall mellom fra 0 til 100 der 0 er dårligst og 100 er best. Endret 6. september 2006 av endrebjorsvik Lenke til kommentar
Erik B. Skrevet 10. september 2006 Forfatter Del Skrevet 10. september 2006 Hvordan spesifiserer jeg hvor det skal lagres? Kan du gi meg et eksempel? Lenke til kommentar
endrebjo Skrevet 10. september 2006 Del Skrevet 10. september 2006 1. $filename = 'bilder/bilde.jpg'; imagejpeg($resource, $filename); 2. imagejpeg($resource, 'bilder/bilde.jpg'); Lenke til kommentar
Erik B. Skrevet 10. september 2006 Forfatter Del Skrevet 10. september 2006 (endret) Takk, nå fikk jeg det til men jeg bruker dette scriptet til å resize bildene og lagre dem i en ny katalog: <?php //$filnavn inneholder informasjon om bildet som lastes opp, skjer tidligere i scriptet $filename="$filnavn"; // The file $filename = "$mappe/" . $_FILES['filbane']['name']; $percent = 0.38; header('Content-type: image/jpeg'); list($width, $height) = getimagesize($filename); $new_width = $width * $percent; $new_height = $height * $percent; $image_p = imagecreatetruecolor($new_width, $new_height); $image = imagecreatefromjpeg($filename); imagecopyresampled($image_p, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height); imagejpeg($image_p, $filename, 100); imagejpeg($image_p, NULL, 100); ?> Dette funker som det skal. Bildene resizes og de blir lagret i en ny mappe. Det som er problemet nå er: Når bildet er lastet opp, så vises bildet i den nye størrelsen. Altså det er kun bildet som vises. Det er ikke mulighet for å ha annen tekst her. Dette gjør at jeg ikke kan bruke denne koden i et design, da får jeg meldingen: Warning: Cannot modify header information - headers already sent by (output started at C:\Programfiler\xampp\htdocs\antonio\index.php:4) in C:\Programfiler\xampp\htdocs\antonio\antonio\lastopp.php on line 33ÿØÿàJFIFÿþ¤Þ,Óü=%žšºö�¬è±O¤Áö9¼9nc‚XþéøGñïâ'ÁߊÔô�Šÿð…x _ðýƃâ�øfËFñ¿‰to‡6íxúþ“g¥ÞÚê—>ª¶¿j›I–Òîl_É¿·¾ŠØ oooosv.... Så det jeg rett og slett spør om er: Hvordan gjøre slik at bildet ikke vises etter at det er blitt lastet opp? Jeg tror dette var svært vanskelig å forstå, men håper noen skarpe hoder der ute forsto dette. Takk for all hjelp så langt! Endret 10. september 2006 av erixz Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå