steffen: thumbnail function

hi hab mir eine thumbnail funktion geschrieben (die gibts ja auch schon oft bei google) jedoch funktioniert die nicht wirklich bei mir:

function thumbnail($image_filename, $image_thumb_size, $image_thumb_size){

$size = getimagesize($image_filename);
           $ow=$size[0];
           $oh=$size[1];
           $image_original = imagecreatefromjpeg($image_filename);
           $image_thumb = imagecreatetruecolor($ow,$oh);

imageCopyResized($image_thumb, $image_original, 0, 0, 0, 0, $image_thumb_size, $image_thumb_size, $ow, $oh);
           imagejpeg($image_thumb);
}

heraus kommt nur ein wirwar an Buchstaben und Sonderzeichen

http://gloop.fireburn.de/thumb.php

Könnt ihr mir bitte helfen? Danke

  1. Bei mir heißt der Befehl:

    ImageCopyResampled($dst,$im,0,0,0,0,$sxs,$sys,$sx,$sy);

    Zudem habe ich bei dem Abspeichern den Komprimierungsgrad angegeben (weiß nicht, ob man das muß):

    ImageJPEG($dst,$imageName."s.jpg",60);

    1. Zudem habe ich bei dem Abspeichern den Komprimierungsgrad angegeben (weiß nicht, ob man das muß):

      ImageJPEG($dst,$imageName."s.jpg",60);

      Nein muss man nicht
      ---> Ist optional :D

      ---> www.php.net/ImageJPEG

  2. function thumbnail($image_filename, $image_thumb_size, $image_thumb_size){

    Das sollte eigentlich von vorn herein schon gar nicht gehen:
    ---> 2 mal "$image_thumb_size" !!!

    $image_original = imagecreatefromjpeg($image_filename);

    Das heißt, dass das nur bei einer JPG-Datei geht !

    imageCopyResized($image_thumb, $image_original, 0, 0, 0, 0, $image_thumb_size, $image_thumb_size, $ow, $oh);

    Der Funktionsname ist falsch !
    nicht : imageCopyResized(
    sondern : imagecopyresized(

    Und die nächste Sache :

    Die Datei, mit der du das Thumbnail generierst, darf NICHTS anderes ausgeben, als ein Bild !
    Also "echo" oder "print" sind hier total fehl am Platz !

    Ich hoffe ich konnte dir helfen ;)

    1. Hi Jojo55,

      recht hattest mit dem doppelten thumbnail_size (mein fehler)

      Habe das script nun so geändert:

      function thumbnail($image_filename, $image_thumb_size){

      $size = getimagesize($image_filename);
                 $ow=$size[0];
                 $oh=$size[1];
                 $image_original = imagecreatefromjpeg($image_filename);
                 $image_thumb = imagecreatetruecolor($ow,$oh);

      imagecopyresized($image_thumb, $image_original, 0, 0, 0, 0, $image_thumb_size, $image_thumb_size, $ow, $oh);
                 imagejpeg($image_thumb);
      }

      immernoch der gleiche mist was er anzeigt:

      http://gloop.fireburn.de/thumb.php

      es geht um das bild: http://gloop.fireburn.de/1.jpg

      soll auch nur bei .jpg files gehen

      mfg

      1. Lieber Steffen,

        Du hast Den Hinweis von Jojo55 nicht beachtet!

        Und die nächste Sache :
        Die Datei, mit der du das Thumbnail generierst, darf NICHTS anderes ausgeben, als ein Bild !
        Also "echo" oder "print" sind hier total fehl am Platz !

        Mein FF zeigt mir folgenden Quelltext:

          
        <html>  
        <head>  
        </head>  
        <body>  
          
        <table><tr><td>����  
          
        ...  
          
        (��?��</td></tr><tr><td></td><td></td><td></td><td></td><td></td></tr>  
          
        </table>  
          
        </body>  
        </html>
        

        Was meinst Du wohl, dass Du noch verbessern müsstest?

        Liebe Grüße aus Ellwangen,

        Felix Riesterer.

        1. Hi Felix,

          ja, aber da habe ich ja das problem das es thumbnails sein sollen und wenn ich viele thumbs nebeneinander haben will, muss ich diese ja irgendwie ordnen das mache ich logischerweise mit HTML ...

          wie kann ich denn das machen?

          1. echo $begrüßung;

            ja, aber da habe ich ja das problem das es thumbnails sein sollen und wenn ich viele thumbs nebeneinander haben will, muss ich diese ja irgendwie ordnen das mache ich logischerweise mit HTML ...

            Dann solltest du noch einmal im Kapitel "Grafiken einbinden" nachlesen, wie Grafiken und HTML zusammenspielen.

            echo "$verabschiedung $name";

            1. Hi,

              aber wie mache ich dann eine art thumbnail script wenn ich es nicht mit HTML verknüpfen kann?

              Bleibt mir jetzt nur noch das mühseelige verkleinern der Bilder???

              1. Hi,

                aber wie mache ich dann eine art thumbnail script wenn ich es nicht mit HTML verknüpfen kann?

                Bleibt mir jetzt nur noch das mühseelige verkleinern der Bilder???

                mach einfach eine html-datei in der du die thumbs jeweils mit <img src="thumb.php?source=mypic.jpg&height=150&width=150"> einbindest.
                den quelltext zu thumb.php findest du iin meinem beitrag weiter oben (http://forum.de.selfhtml.org/?t=110709&m=695264).

                please visit at http://www.arlt.com.

  3. echo $begrüßung;

    hi hab mir eine thumbnail funktion geschrieben ... jedoch

    ...

    heraus kommt nur ein wirwar an Buchstaben und Sonderzeichen

    Du musst noch einen passenden Content-Type-Header mitsenden (z.B. header("Content-Type: image/jpeg");), sonst sendet der Webserver einen Default-Header und der ist augenscheinlich bei .php auf text/html eingestellt.

    echo "$verabschiedung $name";

    1. OK danke für die Info :)

      trotzdem zeigt er kein Bild an :(

      un ich weiß immer noch nicht genau wieso! Jetzt kommt nur die Meldung:

      Die Grafik "http://gloop.fireburn.de/thumb.php" kann nicht angezeigt werden, weil sie Fehler enthält.

      Das hilft mir jedoch nicht wirklich weiter :(

      1. Hallo!

        Die Grafik "http://gloop.fireburn.de/thumb.php" kann nicht angezeigt werden, weil sie Fehler enthält.

        Das hilft mir jedoch nicht wirklich weiter :(

        Das kommt daher weil Du da HTML mitsendest. Entweder Du sendest ein Bild (mit passendem content-type) oder eine HTML-Seite (mit Standard Content-Type).

        Das siehst Du wenn Du in den Quelltext der Seite schaust: view-source:http://gloop.fireburn.de/thumb.php

        Wenn Du content-type image/* sendest, darfst Du auch nur das Bild senden, sonst nichts. Nicht das kleinste Leerzeichen oder Zeilenumbruch am Anfang, am Ende oder ?> <?...

        Guck Dir auch mal die Kommentare zu den GD-Funktionen an: http://de3.php.net/image#usernotes

        Grüße
        Andreas

        --
        SELFHTML Feature Artikel: http://aktuell.de.selfhtml.org/artikel/
  4. hallo steffen,

    eigentlich soll man die menschen ja selbst auf die lösung kommen lassen. aber manchmal sieht man den wald vor lauter bäumen nicht. im prinzip ist es ganz einfach. wenn du mehrere thumbs neben-, über- oder wie auch immer beieinander darstellen möchtest, brauchst du ja auf jeden fall mal ein script, dass dir aus einem quellbild ein thumb erzeugt (das und nur das). dieses script kannst du dann von deiner formatierten html datei so oft aufrufen, wie du möchtest. wenn es jedoch sehr viele thumbs sind oder die gleichen thumbs sehr oft erzeugt würden (durch z.b. viele aufrufe der seite) wäre es besser das thumb als bilddatei auf dem server zu speichern.

    lange rede, kurzer sinn, hier ein für deine kreativität wenig sachdienliches aber funktionsfähiges und universelles "beispiel":

    <?php
    //für die Image-Funktionen wird die GD-Bibliothek (im Lieferumfang von PHP und verfügbar unter http://www.boutell.com/gd/) benötigt.
    $path = $_SERVER['DOCUMENT_ROOT']."/".substr($_SERVER['REQUEST_URI'],1,strrpos($_SERVER['REQUEST_URI'],"/"));
    if(!isset($_GET['source'])){
    echo "Invalid param count. "source" param is missing.";
    DIE;
    };
    if(!isset($_GET['height'])){
    echo "Invalid param count. "height" param is missing.";
    DIE;
    };
    if(!isset($_GET['width'])){
    echo "Invalid param count. "width" param is missing.";
    DIE;
    };
    $fromFile = $_GET['source'];
    $maxWidth = $_GET['width'];
    $maxHeight = $_GET['height'];
    $srcFile = $path.$fromFile;
    if(!file_exists($fromFile)){
    echo "Invalid source file: "".$srcFile.""!";
    DIE;
    };
    if($_GET['width'] == 0){DIE;};
    if($_GET['height'] == 0){DIE;};
    header("Content-type: image/jpeg");
    $image =  imagecreatefromjpeg($srcFile);
    $sizeX = imagesx($image);
    $sizeY = imagesy($image);
    if($sizeY / ($sizeX / $maxWidth) > $maxHeight){
    $ratio = $sizeY / $maxHeight;
    $offsX = ($maxWidth - $sizeX / $ratio) / 2;
    $offsY = 0;
    } else {
    $ratio = $sizeX / $maxWidth;
    $offsX = 0;
    $offsY = ($maxHeight - $sizeY / $ratio) / 2;
    };
    $thumb = imagecreatetruecolor($maxWidth, $maxHeight);
    $bgColor = imagecolorallocate($thumb, 252,250,240);
    imagefill($thumb, 0, 0, $bgColor);
    imagealphablending($thumb, false);
    imagecopyresized($thumb, $image, $offsX, $offsY, 0, 0, $sizeX / $ratio, $sizeY / $ratio, $sizeX, $sizeY);
    imagejpeg($thumb, "",95);
    imagedestroy($thumb);
    ?>

    please visit at http://www.arlt.com.

  5. Lieber Steffen,

    Du weißt schon, dass bei einer Thumbnail-Gallerie von mindestens ca. 50 Thumbnails der Server beim Verkleinern einen nicht unerheblichen Arbeitsaufwand hat und beim höufigen Aufruf Deiner Gallerie spürbar in die Knie gehen kann?

    Du brauchst zweierlei Script-Ansätze:
    1.) Das "Verkleinern"-Script, das die Thumbnails liefert
    2.) wenn nicht als statische HTML-Datei, dann als Script, was die Gallerie in HTML ausgibt.

    Wenn Du sozusagen Ordnerweise Bilder als Gallerie anzeigen lassen möchtest, dann könnte dieses zweite Script eine Liste (<ul>) von Bildern generieren (<ul><li><img /></li><li><img /></li>...</ul>), deren src-Attribut auf das erste Script (mit Parameterübergabe!) verweist.

    Mit CSS kannst Du dann die <li>-Elemente auszeichnen, so dass sie alle eine feste Höhe und Breite haben und links floaten. Damit sieht es dann fasst tabellarisch aus, ist eben eine echte Thumbnail-Gallerie.

    Liebe Grüße aus Ellwangen,

    Felix Riesterer.