alex: GD ImageCreate

$src_img = "andreas1.jpg";
$file_type = GetImageSize($src_img);

$info = GetImageSize($src_img);
$width = $info[0];
$height = $info[1];

$dest_width = 80;
$dest_height = 60;

$dest_img = imagecreatetruecolor($dest_width, $dest_height);
echo "hello";

$result = imagecopyresized( $dest_img, $src_img, 0, 0, 0, 0, $dest_width, $dest_height, $width, $height); // resize the image

imageJPEG($dest_img); // As though output to browser.

Ich habe diesen Code geschrieben, um ein Bild zu verkleinern.
Leider kommt nur eine Reihe kryptischer Zeichen im Browser an, man kann noch dazwischen was lesen von "CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), default quality", also scheint die Funktion ja zu funktionieren, aber warum zeigt er kein Bild an??

vielen dank für tipps tricks.
mfg alex

  1. Hi!

    [...]
    Ich habe diesen Code geschrieben, um ein Bild zu verkleinern.
    Leider kommt nur eine Reihe kryptischer Zeichen im Browser an, man kann noch dazwischen was lesen von "CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), default quality", also scheint die Funktion ja zu funktionieren, aber warum zeigt er kein Bild an??

    Schicke einen geeigneten Content-Type-Header an den Browser und unterbinde jegliche Ausgabe wie »echo 'Hello'«. PHP bietet hierfür die Funktion header(). Für ein jpeg-Bild lautet der richtige Mime-Type image/jpeg.

    Grüße,
    Fabian St.

    1. Schicke einen geeigneten Content-Type-Header an den Browser und unterbinde jegliche Ausgabe wie »echo 'Hello'«. PHP bietet hierfür die Funktion header(). Für ein jpeg-Bild lautet der richtige Mime-Type image/jpeg.

      Grüße,
      Fabian St.

      Habe versucht die header() funktion an verschiedenen Stellen einzufügen, aber er zeigt immer noch die kryptischen Zeichen an. :(
      na mal schaun, ob ichs noch rausbekomme

      1. Hi!

        Schicke einen geeigneten Content-Type-Header an den Browser und unterbinde jegliche Ausgabe wie »echo 'Hello'«. PHP bietet hierfür die Funktion header(). Für ein jpeg-Bild lautet der richtige Mime-Type image/jpeg.
        Habe versucht die header() funktion an verschiedenen Stellen einzufügen, aber er zeigt immer noch die kryptischen Zeichen an. :(

        header() sollte genau vor der Ausgabe des Bildes mittels imagejpeg() stehen. Sollte sich dein Problem immer noch nicht gelöst haben, so zeige uns bitte deinen ganzen Code und einen Link, wo man sich das ganze online ansehen kann. Es scheint nämlich immer noch so zu sein, dass ein falscher Content-Type gesendet wird.

        Grüße,
        Fabian St.

        1. Hallo,
          hatte den header() vor die funktion imagejpeg() geschrieben aber gleiches resultat.
          unter www.lauschangriff-band.de/test/ zu bestaunen.

          hier nochmal der code, der dieses verursacht.
          <?php
          $src_img = "andreas1.jpg";

          $dest_width = 80;
          $dest_height = 60;

          $dest_img = imagecreatetruecolor($dest_width, $dest_height);

          $result = imagecopyresized( $dest_img, $src_img, 0, 0, 0, 0, $dest_width, $dest_height, $width, $height); // resize the image

          ob_start(); // start a new output buffer
             imagejpeg( $dest_img, "", 90 );
             $ImageData = ob_get_contents();
             $ImageDataLength = ob_get_length();
          ob_end_clean(); // stop this output buffer

          header("Content-type: image/jpeg") ;
          header("Content-Length: ".$ImageDataLength);
          echo $ImageData;

          ?>
          vielen dank für jegliche hilfe
          mfg alex

          header() sollte genau vor der Ausgabe des Bildes mittels imagejpeg() stehen. Sollte sich dein Problem immer noch nicht gelöst haben, so zeige uns bitte deinen ganzen Code und einen Link, wo man sich das ganze online ansehen kann. Es scheint nämlich immer noch so zu sein, dass ein falscher Content-Type gesendet wird.

          Grüße,
          Fabian St.

          1. Hi!

            hatte den header() vor die funktion imagejpeg() geschrieben aber gleiches resultat.
            unter www.lauschangriff-band.de/test/ zu bestaunen.

            hier nochmal der code, der dieses verursacht.

            Danke, mit diesen Angaben kann dein Problem gelöst werden ;-)

              
            
            > <?php  
            > $src_img = "andreas1.jpg";  
            >   
            > $dest_width = 80;  
            > $dest_height = 60;  
            
               // hiermit wird eine Image-Ressource erstellt, die von den anderen  
               // image*-Funktionen als Parameter benötigt wird  
               $img = imagecreatefromjpeg($src_img);  
            
            > $dest_img = imagecreatetruecolor($dest_width, $dest_height);  
            >   
            
               $result = imagecopyresized( $dest_img, $img, 0, 0, 0, 0, $dest_width, $dest_height, imagesx($img), imagesy($img)); // resize the image  
              
              
            
            > header("Content-type: image/jpeg") ;  
            > imagejpeg( $dest_img, "", 90 );  
            > ?>  
            
            

            Das ganze Output-Buffer-Zeugs kannst du dir sparen, da du dies für vorliegende Anwendung nicht benötigst. Bedenke außerdem, dass in dieser php-Datei keine weitere Ausgabe (z.B. »echo«) erfolgen darf, da du in diesem Fall einen falschen Content-Type-Header mitschicken würdest. Soll das verkleinerte Bild auf einer anderen Seite dann eben angezeigt werden, so binde es über das src-Attribut des img-Tags ein:

              
            <img src="thumb.php" alt="Thumbnail width="80" height="60" />  
            
            

            Grüße,
            Fabian St.

            1. Hallo,
              vielen vielen dank für den tipp mit dem img-src tag.
              das funktioniert nun fast komplett, habe jetzt nur noch ein problem.
              er zeigt immer nur das erste bild an, bei den anderen fehlt es, zu bestaunen unter www.lauschangriff-band.de/test/

              Habe die dateinamen aus der index.php per environment variablen weitergegeben: <img src=thumb.php?file='.$file.' ... usw.
              KOmischerweise macht er es nur bei einem Bild und nicht bei allen.
              Kann es sein, dass sie zu groß sind, oder falsches format?
              Obwohl es JPEGs sind?

              woran kann es liegen, vielen dank aber schon mal für den Teilerfolg :)

              grüße alex

              Das ganze Output-Buffer-Zeugs kannst du dir sparen, da du dies für vorliegende Anwendung nicht benötigst. Bedenke außerdem, dass in dieser php-Datei keine weitere Ausgabe (z.B. »echo«) erfolgen darf, da du in diesem Fall einen falschen Content-Type-Header mitschicken würdest. Soll das verkleinerte Bild auf einer anderen Seite dann eben angezeigt werden, so binde es über das src-Attribut des img-Tags ein:

              <img src="thumb.php" alt="Thumbnail width="80" height="60" />

              
              >   
              > Grüße,  
              > Fabian St.
              
              1. Hi!

                vielen vielen dank für den tipp mit dem img-src tag.
                das funktioniert nun fast komplett, habe jetzt nur noch ein problem.
                er zeigt immer nur das erste bild an, bei den anderen fehlt es, zu bestaunen unter www.lauschangriff-band.de/test/

                Habe die dateinamen aus der index.php per environment variablen weitergegeben: <img src=thumb.php?file='.$file.' ... usw.
                KOmischerweise macht er es nur bei einem Bild und nicht bei allen.
                Kann es sein, dass sie zu groß sind, oder falsches format?
                Obwohl es JPEGs sind?

                Der Grund hierfür wird wohl wirklich in der Tatsache liegen, dass die Bilder zu groß für PHP aufgrund der vorgenommen Einstellungen zum memory_limit sind. Welchen Wert bei dir diese Konfigurationsdirektive besitzt, findest du über die Funktion ini_get() bzw. durch einen Blick auf die Ausgabe von phpinfo() heraus. Der Hintergrund für das Ganze ist nämlich der, dass die Bearbeitung von Bildern äußerst speicherintensiv ist, sodass man dort schnell an die Grenzen stößt. Ganz hilfreich ist daher auch die Anwendung der Funktion imagedestroy().

                Eventuell hast du auch Zugriff auf die error_log des Apache für deinen VirtualHost - immerhin lößt der Versuch, eines der größeren Bilder zu verkleinern, einen Internal Server Error hervor.

                Grüße,
                Fabian St.