wie mach ich thumbnails



  • hallo, der titel sagt ja schon alles. bracuhe ich dafür ein extra programm??
    ich würde es gerne automatisch mit php machen, wenns geht ...
    danke für infos,
    chris



  • Automatisch mit PHP:

    Im HTML:

    <a href="bild1.jpg"><img src="thumbnail.php?url=bild1.jpg" alt="Bild1"></a>
    

    Die Datei thumbnails.php:

    <?php
    header('Content-type: image/jpg');
    
    $image = ImageCreateFromJPEG($url);
    
    $smallimage = ImageCreate(40,40);
    
    ImageCopyResized($smallimage, $image, 0, 0, 0, 0, 40, 40, ImageSX($image), ImageSY($image));
    
    $ImageJPEG($smallimage);
    ?>
    

    Könnte man natürlich noch verbessern, da nicht alle Bilder Quadratisch sind. Man müsste also die Größe entsprechend anpassen.



  • Original erstellt von Loggy:
    **Automatisch mit PHP:

    Im HTML:

    <a href="bild1.jpg"><img src="thumbnail.php?url=bild1.jpg" alt="Bild1"></a>
    

    Die Datei thumbnails.php:

    <?php
    header('Content-type: image/jpg');
    
    $image = ImageCreateFromJPEG($url);
    
    $smallimage = ImageCreate(40,40);
    
    ImageCopyResized($smallimage, $image, 0, 0, 0, 0, 40, 40, ImageSX($image), ImageSY($image));
    
    $ImageJPEG($smallimage);
    ?>
    

    Könnte man natürlich noch verbessern, da nicht alle Bilder Quadratisch sind. Man müsste also die Größe entsprechend anpassen.**

    Ich würde eher hingehen, das Orgiginal Bild abfragen wie groß (Breite, Höhe) ist und es dann runter scallieren.
    Habe in meinem Buch da was drin (mit Code), das ging wunderbar.
    Aber das Buch ist zuhause. Könnte ja mal den Code posten, wenn du willst...
    Weil dann mußt du nie die größe manuell anpassen, dann mach das Script das alles.
    M+ßtest nur dann auf die PHP-Seite zeigen und der Rest macht sich selbst.



  • hallo loggy,
    leider wird in der html seite das bild nicht verkleinert angezeigt. wenn ich drauf klicke, wird es in voller größe angezeigt. woran kann das liegen oder ist das normal bei deiner lösung?
    danke und gruß,
    chris



  • hallo djblackeagle,
    habe jetzt gerade erst deinen beitrag gesehen/gelesen..
    hätte zwischendurch mal aktualisieren sollen 😉

    es wäre super wenn du mir den code aus deinem buch posten könntest 😉
    vorausgesetzt er ist nicht zu lang .. das hört sich nämlich sehr gut an mit dem automatischen anpassen der größe.
    danke schonmal.
    gruß,
    chris



  • KP (Kein Problem). 🙂
    Ich hoffe es macht dir nix aus dsas ich es um 23 Uhr poste, da ivch erst zuhause bin... 🙄

    [ Dieser Beitrag wurde am 30.09.2002 um 15:17 Uhr von DJ BlackEagle editiert. ]



  • das ist nicht schlimm, ich bin echt froh das du mir überhaupt hilfst 😉
    bis später,
    chris



  • Bei meiner Lösung müsste das Bild immer in 40x40 Pixeln angezeigt werden. Habe es natürlich nicht getestet, aber eigentlich müsste es gehen...



  • Original erstellt von Loggy:
    Bei meiner Lösung müsste das Bild immer in 40x40 Pixeln angezeigt werden. Habe es natürlich nicht getestet, aber eigentlich müsste es gehen...

    es wird nur ein 40x40 kästchen mit umrandung dargestellt. leider keine vorschau.
    trotzdem danke für deine hilfe .. 😉



  • Original erstellt von <chris>:
    das ist nicht schlimm, ich bin echt froh das du mir überhaupt hilfst 😉
    bis später,
    chris

    Mist. Schäm. Schuldigung,hab das total verpeilt. Werde es heute posten. Hoffe das war nicht extrem wichtig 😞



  • Sorry, war ein kleiner Fehler drin, so muss es aussehen (ohne $ natürlich):

    <?php
    header('Content-type: image/jpg');
    
    $image = ImageCreateFromJPEG($url);
    
    $smallimage = ImageCreate(40,40);
    
    ImageCopyResized($smallimage, $image, 0, 0, 0, 0, 40, 40, ImageSX($image), ImageSY($image));
    
    ImageJPEG($smallimage);
    ?>
    

    Bei mir gehts...



  • ich habe endlich den fehler gefunden..

    Fatal error: Call to undefined function: imagecreatefromjpeg() in c:\apache\htdocs\thumbs\thumbnails.php on line 4
    

    ich habe mich ein wenig herumgehört und gelesen das ich "gd" dafür brauche. leider habe ich keine ahnung wie ich das ans laufen bekomme.. ich habe phpv1.11.
    ist die version zu alt dafür?



  • Lad dir das neue PHP 4.2.3 runter, da ist das bei.
    da mußt du halt nur das Modul aktivieren...



  • hab es gelöst in dem ich einen eintrag in meiner php.ini auskommentiert habe.
    leider habe ich immernoch keine lauffähige version mit der ich thumbnails machen kann ..
    trotzdem vielen dank euch allen hier.
    gruß,
    chris



  • für jeden den es interessiert, stelle ich hier nochmal meine lösung zur verfühgung.
    ich habe iene funktion thumbnail erstellt, die mir die arbeit abnimmt.
    aber seht selber

    <?php
        // Der Funktion koennen natuerlich auch die pfade oder andere variablöen uebergeben werden ..
        function thumbnail($image_name /*, $image_path, $thumb_path*/) 
        {
            // Pfade bestimmen
            $image_path  = "../pics";
            $thumb_path  = "thumbs";
    
            $image_name  = $image_name.".jpg";
    
            // Quelle bestimmen
            $src_img     = imagecreatefromjpeg("$image_path/$image_name"); 
    
            // Bildbreite bestimmen
            $origw       = imagesx($src_img); 
            // Bildhoehe bestimmen
            $origh       = imagesy($src_img); 
    
            // Neue Breite bestimmen (Angaben in px)
            if($origw > $origh) {
                $new_w   = 149;
                $new_h   = 112;
            } else {
                $new_w   = 112;
                $new_h   = 149;
            }
    
            // Neuees Bild erzeugen
            $dst_img     = imagecreate($new_w, $new_h); 
            // Kopieren und Aendern der Groesse eines Bild-Teiles 
            imagecopyresized($dst_img, 
                             $src_img,
                             0,
                             0,
                             0,
                             0,
                             $new_w,
                             $new_h,
                             imagesx($src_img),
                             imagesy($src_img)); 
            // Ausgabe des Bildes im Browser oder als Datei
            imagejpeg($dst_img, "$thumb_path/$image_name");
            echo "<img src=\"$thumb_path/$image_name\">";
            return true; 
        }
    
        if(!$nr)
            $nr = 1;
    
        echo "
            <table width=\"100%\" border=\"0\">
                <tr>
                    <td align=\"center\" colspan=\"3\">";
                        echo "<img src=\"", $nr, ".jpg\">";
                        echo "
                    </td>
                </tr>
                <tr valign=\"bottom\">
                    <td>
                        <div align=\"left\">";
                        // Wenn es das erste Bild ist, soll kein Link oder thumbnail dargestellt werden
                        if($nr == 1) {
                            echo "<< previous";
                        } else {
                            echo "<a href=\"pbrowser.php?nr=", $nr-1, "\">";
                            thumbnail($nr-1);
                            echo "<< previous</a>";
                        }
                        echo "
                        </div>
                    </td>
                    <td align=\"center\" valign=\"top\" width=\"400\">
                        <a href=\"pbrowser.php?nr=1\">first</a>
                    </td>
                    <td align=\"right\">";
                        // Hier muss noch gearbeitet werden. Momentan gehts nur bis 28 Bilder ;-)
                        if($nr < 28) {
                            echo "<a href=\"pbrowser.php?nr=", $nr+1, "\">";
                            thumbnail($nr+1);
                            echo "next >></a>";
                        } else {
                            echo "next >>";
                        }
                        echo "
                    </td>
                </tr>
            </table>";
    ?>
    

    das einzige problem ist hier noch das max datei-limit. das heist man muss selber eingeben wieviele bilder in einem verzeichnis sind. bei mir waren es 28 😉
    ich weis leider nicht ob es dafür eine funktion o.ä. gibt.. habe keine gefunden !?

    @dj du bracuhst mir die lösung aus dem buch nicht mehr posten 😉
    @loggy wäre das nicht etwas für die faq?

    danke und gruß,
    christian aus bonn



  • Du speicherst jetzt aber den Thumbnail in einer extra Datei. Kann man machen.

    Dann kann ich aber überhaupt nicht nachvollziehen, wie du die Bilder aus dem Verzeichnis liest und in der Liste darstellst...
    Da ist keine while-Schleife, kein opendir usw.



  • es sollte einfach nur folgende funktion haben: http://www.walux.de/pics/pbrowser.php

    mehr wollte ich eigentlich nicht 😉
    eine kleine vorschau von allen bildern wäre auf der startseite, bevor mein script kommt vielleicht sinnvoll. sozusagen noch iene navigation ganz oben auf der seite ...



  • Ah so, ja.



  • Ok, chris. Das Buch habe ich auch nicht mehr.
    Ich habe mir das jetzt mal selbst programmiert, deine variante ist zwar gut, aber viel zu viel Code...

    Ich poste mal mein Code:

    <?php
      if(!$breit)
      {
        $breit = 150;
      }
      else
      {
        $breit = ceil($breit);
      }
      if(!$bild)
      {
        $quellbild = "test.jpg";
      }
      else
      {
        $quellbild = urldecode($bild);
      }
    
      $info = getimagesize($quellbild);
      $breitalt = $info[0];
      $hochalt = $info[1];
    
      $hoch = ceil($hochalt*$breit/$breitalt);
    
      switch($info[2])
      {
        case 1:
          $bildalt = imagecreatefromgif($quellbild);
          break;
        case 2:
          $bildalt = imagecreatefromjpeg($quellbild);
          break;
        default:
          break;
      }
    
      $bildneu = imagecreate($breit, $hoch);
      imagecopyresized($bildneu, $bildalt, 0, 0, 0, 0, $breit, $hoch, $breitalt, $hochalt);
    
    // Tip 1: ANFANG
      header("Content-Type: image/gif");
      imagegif($bildneu);
      imagedestroy($bildneu);
      imagedestroy($bildalt);
    // Tip 1 ENDE
    ?>
    

    Tip:
    Wenn du jpeg nutzen willst, kannst du halt

    header("Content-Type: image/jpeg");
    imagejpeg($bildneu,"",100);  // Die 100 steht für die Komprimierung
    imagedestroy($bildneu);
    imagedestroy($bildalt);
    

    [ Dieser Beitrag wurde am 03.10.2002 um 00:06 Uhr von DJ BlackEagle editiert. ]



  • @black
    dank dir für deine lösung, habe meines ein wenig angepass 😉
    danke und gruß,
    christian


Anmelden zum Antworten