PHP Bild - Galerie

hej an alle
ich hätte da eine frage bezüglich einer bildergallerie in php: ich benötige ein script, dass mir alle bilder (beliebige namen) aus einem oder mehreren Ordnern (Unterordnern) auf einer site als link verkleinert darstellt (der link bezieht sich auf das originale bild).
Das Problem dabei ist jedoch, wenn es sich hierbei um bilder mit einer hohen auflösung handelt. Denn realisiert man das so, dass die Bilder einfach nur verkleinert dargestellt werden, braucht es an zeit, die gesamten grafiken vom server zu laden, wenn man nur 1 oder 2 bilder in originalgröße sehen möchte.
Ich brauche ein Script, dass die Bilder aus beliebigen Unterordnern nimmt, echt verkleinert darstellt und bei einem klick auf das bild erst das original image darstellt.

Ich hab unter google bereits klassen dafür gefunden, jedoch tu ich mir schwer mit der umsetzung auf meine scripten.

thx
 
Du köntest das Bild uU. gleich beim Upload umformen lassen.
Dass ein sog. Thumbnail erstellt wird, weleches du dann verlinkst. Würde einiges an rechenleistung sparen, aber halt Speicherplatz fressen. (wenn auch wenig)

Ein Freund hat mal sowas geschrieben, ich frage mal ob er das noch hat und dir den code überlässt :)
 
=) thx wäre toll. die idee ist eigentlich garnicht schlecht: aber ein bild mit dieser größe über http up-zu loaden ... wenn dann würden ich den ganzen ordner (wenn neue bilder vorhanden sind) gleich über ftp uploaden und ein php script starten, dass die php Datei, die die Bilder verkleinert und anzeigt in den ordner kopiert und einen link auf der übersichtsseite zu dieser datei erstellt =) über eine eigene seite uploaden ist denk ich mal zu kompliziert ...

lg
 
ich hab da mal ein script geschrieben, dass die bilder allerdings in echtzeit verkleinert. Also das auflisten der files dauert dann trotzdem etwas, da jedes bild einseln verkleinert wird.

Das ganze funzt nur für jpg (aber kannste ja nach belieben dann auch auf andere formate erweitern.

Alles was nicht JPG ist (also auch unterordner) werden als einfacher link angegeben. Aber kannst ja nach belieben erweitern, wie du willst.

Ach ja, das script arbeitet immer nur über einen ordner. Inhalte aus unterordnern werden nicht aufgeführt.

Code:
// ////////////////////////////////////////////////////////////////////////////////

$path = "/www/htdocs/filesss/files/treffen_nbg_2004-1"; // lokaler pfad
$dir = "";                     // relativer pfad ab index.php

// ////////////////////////////////////////////////////////////////////////////////





if (isset($_GET['file'])) {
  header('Content-type: image/jpeg');                                                //browser auf imageausgabe vorbereiten
    $size         = getimagesize($_GET['file']);                                   //bildgröße definieren (ff.)
    $width_old    = $size[0];
    $height_old    = $size[1];
    $old_picture  = imagecreatefromjpeg($_GET['file']);                            //bild einlesen
    if ($width_old > $height_old) {                                                //format auslesen (hochkannt, quer)
      $width_new = '170';                                                          //und neue maße proportional berechnen
          $div = $width_old / $width_new;
      $height_new = $height_old / $div;}
    elseif ($width_old < $height_old) {
      $height_new = '170';
          $div = $height_old / $height_new;
      $width_new = $width_old / $div;}
    else {
      $width_new = '170';
      $height_new = $width_new;}
    $new_picture  = imagecreatetruecolor($width_new, $height_new);                  //neues bild definieren
    imagecopyresampled($new_picture, $old_picture, 0, 0, 0, 0, $width_new, $height_new, $width_old, $height_old);  //resample
    imagejpeg($new_picture);
    exit;
 }


echo'
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Unbenanntes Dokument</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body>
<p><strong><font size="5">Dateiliste von YOURSERVER </font></strong></p>
Dieser Webspace dient ausschließlich dazu, diverse dateien online verfügbar zu machen, In Foren einzubinden, oder für Bestimmte zwecke privat erreichbar zu machen.<br>
Ohne ausdrückliche Genehmigung ist es daher untersagt diese Dateien zu Speichern oder weiterzuverwenden.
<hr>
<p>
<table border=0>';

//Daten auslesen

$dp = opendir($path);
 while ($file = readdir($dp))
 {
   if (!preg_match('/^\.{1,2}/', $file) && $file != 'index.php')
   {
      if (strtolower(substr($file , strlen($file)-3, strlen($file)))=='jpg')
      {
      echo '<tr><td><img src="index.php?file='.$dir.$file.'"></td>';
      }
      else
      {
      echo '<tr><td> </td>';
      }
   echo '<td><a href="'.$dir.$file.'">'.$file.'</a></td></tr>';

   }
}

echo'
</p>
</body>
</html>';
?>
 
hab mich da grad ein bisschen damit gespielt, irgendwie haut das nicht ganz hin. aber ich weiß jetzt was für einen teil des codes ich benötige, um bilder zu verkleinern:

Code:
if (isset($_GET['file'])) {
  header('Content-type: image/jpeg');                                                //browser auf imageausgabe vorbereiten
    $size         = getimagesize($_GET['file']);                                   //bildgröße definieren (ff.)
    $width_old    = $size[0];
    $height_old    = $size[1];
    $old_picture  = imagecreatefromjpeg($_GET['file']);                            //bild einlesen
    if ($width_old > $height_old) {                                                //format auslesen (hochkannt, quer)
      $width_new = '170';                                                          //und neue maße proportional berechnen
          $div = $width_old / $width_new;
      $height_new = $height_old / $div;}
    elseif ($width_old < $height_old) {
      $height_new = '170';
          $div = $height_old / $height_new;
      $width_new = $width_old / $div;}
    else {
      $width_new = '170';
      $height_new = $width_new;}
    $new_picture  = imagecreatetruecolor($width_new, $height_new);                  //neues bild definieren
    imagecopyresampled($new_picture, $old_picture, 0, 0, 0, 0, $width_new, $height_new, $width_old, $height_old);  //resample
    imagejpeg($new_picture);
    exit;
 }

thx
 
Hab mir mal den Quellcode genommen und nach meinen Wünschen angepasst der sieht aus wie folgt:
PHP:
<?php
echo "<h2>Pictures</h2>";
echo "<br />Hier findet ihr Bilder von uns.<br /><br />";
// ////////////////////////////////////////////////////////////////////////////////

$path = "/srv/www/htdocs/web81/html/realinsanity/schatznme/img/schatz"; // lokaler pfad
$dir = "img/schatz/";                     // relativer pfad ab index.php

// ////////////////////////////////////////////////////////////////////////////////





if (isset($_GET['file'])) {
  header('Content-type: image/jpeg');                                                //browser auf imageausgabe vorbereiten
    $size         = getimagesize($_GET['file']);                                   //bildgröße definieren (ff.)
    $width_old    = $size[0];
    $height_old    = $size[1];
    $old_picture  = imagecreatefromjpeg($_GET['file']);                            //bild einlesen
    if ($width_old > $height_old) {                                                //format auslesen (hochkannt, quer)
      $width_new = '170';                                                          //und neue maße proportional berechnen
          $div = $width_old / $width_new;
      $height_new = $height_old / $div;}
    elseif ($width_old < $height_old) {
      $height_new = '170';
          $div = $height_old / $height_new;
      $width_new = $width_old / $div;}
    else {
      $width_new = '170';
      $height_new = $width_new;}
    $new_picture  = imagecreatetruecolor($width_new, $height_new);                  //neues bild definieren
    imagecopyresampled($new_picture, $old_picture, 0, 0, 0, 0, $width_new, $height_new, $width_old, $height_old);  //resample
    imagejpeg($new_picture);
    exit;
 }


echo'<table border=0>';

//Daten auslesen

$dp = opendir($path);
 while ($file = readdir($dp))
 {
   if (!preg_match('/^\.{1,2}/', $file) && $file != '/schatznme/inc/inhalt/picz.php')
   {
      if (strtolower(substr($file , strlen($file)-3, strlen($file)))=='jpg')
      {
      echo '<tr><td><img src="/schatzme/inc/inhalt/picz.php?file='.$dir.$file.'" alt="'.$file.'"></td>';
      }
      else
      {
      echo '<tr><td> </td>';
      }
   echo '<td><a href="'.$dir.$file.'">'.$file.'</a></td></tr>';

   }
}
echo '</table>';
?>
Mein Problem ist nun der zeigt mir die Thumbs net an... hab schon alle möglichen Pfade ausprobiert aber es geht einfach nicht..
hier der link zum angucken vllt hilft euch das ja: http://truelove-online.de.vu/index.php?section=picz
 
Das Problem ist, dass du zuerst Text ausgibst, dann das Bild und zuletzt wieder Text. Dann weist du den Browser an, das ganze als Bild zu interpretieren. Der kann damit natürlich nix anfangen. Der Codeschnipsel, das ich gestern hier gepostet habe, sollte eigentlich funktionieren, versuch es mal damit.

edit: Ausserdem ist der Code problematisch, weil man ihm per GET-Variable beliebig grosse Bilddateien übergeben kann, was den Server ziemlich belasten kann.
 
Der Fehler sollte in zeile 50 liegen, weil du da eine andere datei verlinkst.. dort sollte meiner erinenrung nach $SERVER['PHPSELF'] stehen.

Weil er ja nur die funktion oben aufruft.

Dei Aussage von xsheep, dass der header im nachhinein auf grafikausgabe geändert wird, stimmt nicht.. die headeranweisung wird ausgegeben, wenn man den GDLib-teil aufruft, dieser wird ja aber als grafik eingebunden, vion daher stimmt das schon so.
Im moment wird bei dir eben nur der alternativtext ausgegeben, weil der pfad falsch ist.

Hingegen stimmt die Aussage, die er nach dem edit eingefügt hat. Aber darüber solltest du dir im klaren sein. evtl können daraus sogar Sicherheitslücken entstehen, denen ich mir nicht bewust bin.

edit:
Ach ja, wenn alles richtig ist, funzt das script 100 pro, hatte es bis vor kurzem im einsatz, zwar um einige zeilen erweitert, da es inzwischen ein ganzer filebrowser mit miniaturansicht geworden ist., der n haufen dateitypen erkennt, und auch mit unterverzeichnissen umgehen kann, aber das grundgerüst ist das selbe geblieben.
 
Original von flame

Im moment wird bei dir eben nur der alternativtext ausgegeben, weil der pfad falsch ist.

das habe ich auch erst gedacht bis ich mir mal den quelltext unter firefox angeguckt habe. siehe da, ich bekomme den source vom bild ;-)

wenn ich einfach mal andere werte für file= übergebe bekomme ich auf diese weise auch fehlermeldungen zu sehen, dass die angegebene datei dann nicht geöffnet werden konnte. es ist soweit also eigentlich richtig verlinkt
 
Das ansich verlinkte tuts ja... nur der zeigt keine Thumbs an kp warum.. hab das auch geändert nur zeigt keine wirkung bei mir...

also die Page liegt im Verzeichnis schatznme dieses Verzeichniss befindet sich auf meiner hauptpage der real-insanity.de, jedoch habe ich die Page die in dem Ordner schatznme befindet über nic.de.vu laufen sprich der Pfad von meiner real-insanity.de Page wäre real-insanity.de/schatznme/ wobei die eig. Seite unter truelove-online.de.vu zu finden ist... hab ich vltl mit den pfad angaben was falsch gemacht?
wenn ich die datei ohne über die de.vu Domain drauf zugreife sprich: real-insanity.de/schatznme/inc/ihalt/picz.de?file=imgp3884.jpg zeigt der mir das alles an:

Code:
<h2>Pictures</h2><br />Hier findet ihr Bilder von uns.<br /><br /><br />
<b>Warning</b>:  getimagesize(): Unable to access imgp3884.jpg in <b>/srv/www/htdocs/web81/html/realinsanity/schatznme/inc/inhalt/picz.php</b> on line <b>17</b><br />
<br />
<b>Warning</b>:  getimagesize(imgp3884.jpg): failed to open stream: No such file or directory in <b>/srv/www/htdocs/web81/html/realinsanity/schatznme/inc/inhalt/picz.php</b> on line <b>17</b><br />
<br />
<b>Warning</b>:  imagecreatefromjpeg(imgp3884.jpg): failed to open stream: No such file or directory in <b>/srv/www/htdocs/web81/html/realinsanity/schatznme/inc/inhalt/picz.php</b> on line <b>20</b><br />
<br />
<b>Warning</b>:  imagecopyresampled(): supplied argument is not a valid Image resource in <b>/srv/www/htdocs/web81/html/realinsanity/schatznme/inc/inhalt/picz.php</b> on line <b>33</b><br />
????JFIF??>CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), default quality
??C		

 $.' ",#(7),01444'9=82<.342??C			

2!!22222222222222222222222222222222222222222222222222????"?Ä	
?Ä?}!1AQa"q2￾??#B?ÁR? $3br?	
%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz???????Š????????š??¤??§¨????´???¸??Â?Ä??Ç?É??ÓÔ?Ö×??Úáâ?ä??ç?é???óô?ö÷??ú?Ä	
?Ä?w!1AQaq"2￾B???Á	#3R br?
$4á%?&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz????????Š????????š??¤??§¨????´???¸??Â?Ä??Ç?É??ÓÔ?Ö×??Úâ?ä??ç?é??óô?ö÷??ú?Ú???Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ??
 
Original von flame
Dei Aussage von xsheep, dass der header im nachhinein auf grafikausgabe geändert wird, stimmt nicht.. die headeranweisung wird ausgegeben, wenn man den GDLib-teil aufruft, dieser wird ja aber als grafik eingebunden, vion daher stimmt das schon so.
Im moment wird bei dir eben nur der alternativtext ausgegeben, weil der pfad falsch ist.

Vielleicht habe ich mich unverständlich ausgedrückt, aber ich habe gemeint, dass im Quelltext zuerst HTML steht, dann die Binärdaten des Thumnails und schliesslich wieder HTML, und dass das logischerweise vom Browser nicht angezeigt werden kann, den Quelltext hat Abstauber ja schon eingefügt.
 
also ich finde unter den angegebenen pfaden auf deinem server auch keine bilder.. (soweit das hier zugriffsberechtigt ist).

Schick mir doch mal bitte (per pn oder e-mail) deinen code, und die url zu mindestens einem deiner bilder. dann schau ich mir das am Samstag mal an.. vorher bin ich leider nichtmehr zuhause.. Aber ich behaupte immernoch, dass die pfadangaben nicht stimmen.
 
löl schon etwas älter der thread :P aber trotzdem danke. kann das ganze mittlerweile schon selber coden :]

zum beispiel:
ja also html code und bildcode geht natürlich garnicht. wenn ein php scipt ein bild erzeugt darf es selbst keinen code wie html, javascript usw enthalten. ich denke auch mal, was ich noch nie probiert habe, dass auch "falscher" php code das bild nicht korrekt darstellen lässt, z.b.
Code:
$dp = opendir($path);
 while ($file = readdir($dp))
da das script ja wie ein bild auch in "img" tags eingebunden werden kann.
lg
 
Also wie bereits gesagt hatte den echo befehl bzw. den HTML-Kram rausgenommen aberich bekomme dennoch keine THumbnails angezeigt, ich würde auch viel lieber diese Lösung einer Gallerie benutzen, da sie Verlinkung besitzt und den Dateinamen auch anzeigt, bzw. das Verzeichnis ausliest :D

Also was müsste ich änder damit es klappt?
Danke schonmal im Voraus ;)
 
bild.php:
PHP:
<?php

$pfad = "img";
$breite_neu = 50;

$handle = opendir($pfad);

for($i = 0; $i <= $_GET['id']+2 && $bild = readdir($handle); $i++);
@list($breite, $hoehe, $format) = getimagesize($pfad."/".$bild)
    or die("ID ungütig");

switch($format){
    case 1:
      $quellbild = imagecreatefromgif($pfad."/".$bild);
      break;
    case 2:
      $quellbild = imagecreatefromjpeg($pfad."/".$bild);
      break;
    case 3:
      $quellbild = imagecreatefrompng($pfad."/".$bild);
}

$skalierungsfaktor = $breite/$breite_neu;
$hoehe_neu = $hoehe/$skalierungsfaktor;
$zielbild = imagecreatetruecolor($breite_neu,$hoehe_neu);
imagecopyresampled($zielbild,$quellbild,0,0,0,0,$breite_neu,$hoehe_neu,$breite,$hoehe);
header("Content-type: image/jpeg");
imagejpeg($zielbild, '', 100);
imagedestroy($zielbild); imagedestroy($quellbild);
closedir($handle);

?>

foobar.php:
PHP:
<?php

$pfad = "img";

$handle = opendir($pfad);

for(; $bild=readdir($handle); $i++)
    if($bild!='.'&&$bild!="..")
        echo "<a href=\"".$pfad."/".$bild."\"><img src=\"bild.php?id=".$i."\" border=\"0\" /></a>";
    else
        $i = -1;

closedir($handle);

?>

Das sollte funktionieren.
 
also so das klappt schon super so :) Brauch nur Bilder rein schieben usw. :) jezz code ich noch upload script und dann isses alles super :) Dankeschön

Mal ne Frage kann ich das auch so machen dass der nur 3-4 bilder in einer reihe anzeigt also horizontal? Hab schon mit table ausprobiert geht zwar aber dann haut der alle Bilder der länge nach in die Zeile =(

Habe grad gesehen dass es noch einen Fehler gibt, sobald ich mehr bilder als 4 in dem Ordner habe ist die verlinkung i-wie total durch einander...
 
bild.php:
PHP:
<?php

$pfad = "img";
$breite_neu = 60;

$handle = opendir($pfad);

for($i = 0; $i <= $_GET['id']+2 && $bild = readdir($handle); $i++);
@list($breite, $hoehe, $format) = getimagesize($pfad.'/'.$bild)
    or die("ID ungütig");

if(!isset($_GET['thumb'])){
    header("Location: ".$pfad.'/'.$bild);
    exit;
}

switch($format){
    case 1:
      $quellbild = imagecreatefromgif($pfad.'/'.$bild);
      break;
    case 2:
      $quellbild = imagecreatefromjpeg($pfad.'/'.$bild);
      break;
    case 3:
      $quellbild = imagecreatefrompng($pfad.'/'.$bild);
}

$skalierungsfaktor = $breite/$breite_neu;
$hoehe_neu = $hoehe/$skalierungsfaktor;
$zielbild = imagecreatetruecolor($breite_neu,$hoehe_neu);
imagecopyresampled($zielbild,$quellbild,0,0,0,0,$breite_neu,$hoehe_neu,$breite,$hoehe);
header("Content-type: image/jpeg");
imagejpeg($zielbild, '', 100);
imagedestroy($zielbild); imagedestroy($quellbild);
closedir($handle);

?>

foobar.php:
PHP:
<?php

$pfad = "img";
$spalten = 3;
$zeilen = 2;

$handle = opendir($pfad);

for($max = 0; $bild = readdir($handle); $max++);
$max-=2;

echo "<table cellspacing=\"10\" cellpadding=\"5\">";
for($n = 0; $n<$zeilen; $n++){
    echo "<tr>";
    for($i = 0; $i<$spalten&&($n*$spalten+$i+$_GET['seite']*$spalten*$zeilen)<$max; $i++)
        echo "<td style=\"border: 1px solid black; margin: 10px; text-align: center; horizonal-align: middle;\"><a href=\"bild.php?id=".($n*$spalten+$i+$_GET['seite']*$spalten*$zeilen)."\"><img src=\"bild.php?id=".($n*$spalten+$i+$_GET['seite']*$spalten*$zeilen)."&thumb\" border=\"0\" /></a></td>";
    echo  "</tr>";
}

$getvars = '?'; foreach($_GET as $key => $value) if($key!="seite") $getvars.=$key.'='.$value.'&';

echo "<tr>";
if($spalten*$zeilen<$max){
    echo "<td colspan=\"".($spalten-1)."\">";
    if($seite>0) echo "<a href=\"".$_SERVER['PHP_SELF'].$getvars."seite=".($_GET['seite']-1)."\">« zurück</a> ";
    echo "</td><td>";
    if(($_GET['seite']+1)*$spalten*$zeilen<$max) echo "<a href=\"".$_SERVER['PHP_SELF'].$getvars."seite=".($_GET['seite']+1)."\">vorwärts »</a>";
    echo "</td>";
}
echo "</tr></table>";

?>

Ich hab jetzt ne Blätterfunktion hinzugefügt, das Script dazu gebracht, die Bilder in eine Tabelle reinzupacken und versucht, dass die Verlinkung klappt. Hoffentlich funktioniert es :)
 
Zurück
Oben