Tobias W: Automatisch Thumbnails generieren und in Ordner speichern.

Hallo zusammen.
Ich habe auf meinem momentanen Webprojekt ein kleines Problem.
Ich hab in PHP ein kleines Script gebaut, welches alle Bilder ausliest, die sich in einem gewissen Ordner befinden.

Das funktioniert gut, doch sind die Bilder alle relativ gross. Kennt ihr ein Script, welches für jedes Bild im Ordner, auch wenn später welche hinzugefügt werden, ein Thumbnail generiert, welches dann im Bildordner im Unterordner Thumbs gespeichert wird.

Mein Abfragescript schafft es die jeweiligen Thumbs zu den grossen Bildern zu verlinken.

Zur Info hänge ich hier noch mein Script an:

<table align='left' border='0' width='400px' cellspacing='5px' cellpadding='2px' height='95%'>

<tr height="39px" >
   <td width='400px'>
    <?php

$path = "natur/thumbs/";
     $path2= "natur/";
     $dh = opendir($path);
     $i=1;
     $anz = count($path);

while (($file = readdir($dh)) !== false)
     {

if($file != "." && $file != "..")

{
    echo "<a href="javascript:Foto('$path2$file')"><img border='0' src='$path$file' width='45' height='45'></a>";
 $i++;
    }
            }
      closedir($dh);
    ?>

</table>

Hat jemand von euch eine Idee oder ein paar Ansätze?

Danke vielmals!

MFG Tobias

  1. Hallo,

    Hat jemand von euch eine Idee oder ein paar Ansätze?

    So etwas habe ich schon einmal gebraucht. Es sieht bei mir etwa so aus:

    --BildSetzen.php--

    <?
    $ordner = "img";
    $handle = opendir($ordner);
    while ($file = readdir ($handle)) {
        if($file != "." && $file != "..") {
                $compl = $ordner."/".$file;
    $bild="img/".$file;
    $size=getimagesize($bild);
                 $breite=$size[0];
                 $hoehe=$size[1];
                     $neueHoehe=95;
                     $neueBreite=intval($breite*($neueHoehe/$hoehe));
                     $altesBild=ImageCreateFromJPEG($bild);
                     $neuesBild=imagecreatetruecolor($neueBreite,$neueHoehe);
                     imagecopyresampled($neuesBild,$altesBild,0,0,0,0,$neueBreite,$neueHoehe,$breite,$hoehe);
                     ImageJPEG($neuesBild,"thumbs/".$file);
        }
    }
    ?><br>Fertig.

    -------------------------
    Vielleicht hilft es dir ja irgendwie weiter ;)

    MfG, Jannis

    1. Hallo Jannis
      Danke vielmals, ich bin gerade damit am experimentieren, doch kommt bestimmt gut.

      Dank dir geht nun alles bedeutend schneller :)

      MFG Toby

      1. Anfangs waren es ca. 10 Fehlermeldungen, nun sind es nur noch diese:

        Warning: getimagesize(portraits/thumbs) [function.getimagesize]: failed to open stream: Permission denied in C:\xampp\htdocs\portfolio\index.php on line 107

        Warning: Division by zero in C:\xampp\htdocs\portfolio\index.php on line 111

        Warning: imagecreatefromjpeg(portraits/thumbs) [function.imagecreatefromjpeg]: failed to open stream: Permission denied in C:\xampp\htdocs\portfolio\index.php on line 112

        Warning: imagecreatetruecolor() [function.imagecreatetruecolor]: Invalid image dimensions in C:\xampp\htdocs\portfolio\index.php on line 113

        Warning: imagecopyresampled(): supplied argument is not a valid Image resource in C:\xampp\htdocs\portfolio\index.php on line 114

        Warning: imagejpeg(): supplied argument is not a valid Image resource in C:\xampp\htdocs\portfolio\index.php on line 115

        Ich find die Fehler beim besten Willen nicht mehr raus!

        Ordnerstruktur:

        • portfolio - images
                          -natur
                            -thumbs

        Wäre froh um Hilfe ;)

        1. Warning: getimagesize(portraits/thumbs) [function.getimagesize]: failed to open stream: Permission denied in C:\xampp\htdocs\portfolio\index.php on line 107

          Du hast nicht die nötigen Berechtigungen gesetzt. Dein Skript teilt dir mit, dass ein Bild nicht geöffnet werden darf. Alles andere sind Folgefehler.

          1. Danke für deine schnelle Antwort

            Ich habe nun nochmals von vorne begonnen.

            <?
            $ordner = "img";
            $handle = opendir($ordner);
            while ($file = readdir ($handle)) {
                if($file != "." && $file != "..") {
                        $compl = $ordner."/".$file;
            $bild="img/".$file;
            $size=getimagesize($bild);
                         $breite=$size[0];
                         $hoehe=$size[1];
                             $neueHoehe=95;
                             $neueBreite=intval($breite*($neueHoehe/$hoehe));
                             $altesBild=ImageCreateFromJPEG($bild);
                             $neuesBild=imagecreatetruecolor($neueBreite,$neueHoehe);
                             imagecopyresampled($neuesBild,$altesBild,0,0,0,0,$neueBreite,$neueHoehe,$breite,$hoehe);
                             ImageJPEG($neuesBild,"thumbs/".$file);
                }
            }
            ?><br>

            Was muss ich hier genau anpassen und wie?
            Ich bin PHP-technisch nicht sehr fit...

            Die Bilder sind alle im Ordner portraits.
            Die Thumbs befinden sich im Unterordner von portraits (thumbs)

            Wäre super wenn sich jemand ne Minute Zeit nehmen könnte.

            MFG Tobias

            1. $bild="img/".$file;

              Das "img/" ist der Bildpfad für die Originale...

              ImageJPEG($neuesBild,"thumbs/".$file);

              Das "thumbs/" ist der Bildpfad für die Thumbnails.

              Was muss ich hier genau anpassen und wie?
              Ich bin PHP-technisch nicht sehr fit...

              Die Bilder sind alle im Ordner portraits.
              Die Thumbs befinden sich im Unterordner von portraits (thumbs)

              So könnte es gehen...:

              <?
              $ordner = "portraits";
              $handle = opendir($ordner);
              while ($file = readdir ($handle)) {
                  if($file != "." && $file != "..") {
                          $compl = $ordner."/".$file;
              $bild="portraits/".$file;
              $size=getimagesize($bild);
                           $breite=$size[0];
                           $hoehe=$size[1];
                               $neueHoehe=95;
                               $neueBreite=intval($breite*($neueHoehe/$hoehe));
                               $altesBild=ImageCreateFromJPEG($bild);
                               $neuesBild=imagecreatetruecolor($neueBreite,$neueHoehe);
                               imagecopyresampled($neuesBild,$altesBild,0,0,0,0,$neueBreite,$neueHoehe,$breite,$hoehe);
                               ImageJPEG($neuesBild,"portraits/thumbs/".$file);
                  }
              }
              ?>

  2. Hallo Tobias, Marco B. und Wahrsager!

    Du bist schon mal angesprochen worden, Dich auf einen Nick festzulegen. Ich stellen Deinen Thread hier deswegen solange auf NoAnswer, bist Du Dich via E-Mail bei mir meldest (siehe Developer-Seite).

    Weitere Postings unter weiteren Nicks werden ich sofort löschen.

    Viele Grüße aus Frankfurt/Main,
    Patrick

    --

    _ - jenseits vom delirium - _
    [link:hatehtehpehdoppelpunktslashslashwehwehwehpunktatomicminuseggspunktcomslash]
    Nichts ist unmöglich? Doch!
    Heute schon gegökt?
    1. Nachdem weiter oben eine Klärung stattgefunden hat, ist dieser Thread wieder zum Antworten und Schreiben offen.

      Viele Grüße aus Frankfurt/Main,
      Patrick

      --

      _ - jenseits vom delirium - _
      [link:hatehtehpehdoppelpunktslashslashwehwehwehpunktatomicminuseggspunktcomslash]
      Nichts ist unmöglich? Doch!
      Heute schon gegökt?