Gå til innhold

Vise bilder i mappe


Anbefalte innlegg

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
Videoannonse
Annonse

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

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
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 av Slettet+142
Lenke til kommentar

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

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

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 av Tussi_qwerty
Lenke til kommentar

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

 

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 av Tussi_qwerty
Lenke til kommentar

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

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
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 av endrebjorsvik
Lenke til kommentar

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 av erixz
Lenke til kommentar

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...