daniel: PHP und GD - Thumbnail aus großem JPG erstellen

hallo alle zusammen,

ich habe gestern nacht mal versucht, mit php / GD ein JPG-Bild als Thumbnail auszugeben...

von meinem provder aus müßte das gehen: http://www.kontent-demo.de/ <--phpinfo() davon.

aber irgendwo hakt es? alles was ich von dem bild immer sehe, ist ein solches kleines kästchen, das anzeigt, das das bild nicht gefunden wurde ?

ich glaube, es hakt einfach an der stelle, wo das bild mit imagejpeg() ausgegeben werden sollte....
leider gibt php.net auch noicht soviel her zu dieser funktion.
irgendwie fehlt da nämlich ein beispiel ;-)

da ich auch keine fehlermeldung (abgesehen von dem kaputten bild bekomme) poste ich mal das script.

ich hab versucht jede zeile zu kommentieren, damit es verständlich wird, was ich da versuche ;-)

<?php

//parser liest quellbild ein
$quellbild=imagecreatefromjpeg("DCP_0024.jpg");

//neue breite -> hoehe wird entsprchend skaliert (px)
$breite_neu = 200;

//breite und hoehe des quellbildes werden in variablen geschrieben
$breite = imagesx($quellbild);
$hoehe = imagesy($quellbild);

//multiplikator fuer die skalierung errechnen
$skalierungsfaktor = $breite/$breite_neu;
//neue hoehe errechnen
$hoehe_neu = $hoehe/$skalierungsfaktor;

//Filehandle fuer das 2te Bild, das eigentliche Thumbnail
$zielbild = imagecreate($breite,$hoehe);

//kopiert das alte bild in das neue und skaliert nach den letzen 4 faktoren
$thumb=
imagecopyresampled($zielbild,$quellbild,0,0,0,0,$breite_neu,$hoehe_neu,$breite,$hoehe);

?>

<html><head><title>Thumbnail-Test</head><body>
<!-- Ausgabe des Bildes -->
<?php echo imagejpeg("$thumb"); ?>
</body></html>

so, c'est ca.
ich hoffe, ich hahb nur was übersehen ;-))

danke für eure hilfe und viele grüße,
daniel

  1. hallo alle zusammen,

    ich habe gestern nacht mal versucht, mit php / GD ein JPG-Bild als Thumbnail auszugeben...

    von meinem provder aus müßte das gehen: http://www.kontent-demo.de/ <--phpinfo() davon.

    aber irgendwo hakt es? alles was ich von dem bild immer sehe, ist ein solches kleines kästchen, das anzeigt, das das bild nicht gefunden wurde ?

    ich glaube, es hakt einfach an der stelle, wo das bild mit imagejpeg() ausgegeben werden sollte....
    leider gibt php.net auch noicht soviel her zu dieser funktion.
    irgendwie fehlt da nämlich ein beispiel ;-)

    da ich auch keine fehlermeldung (abgesehen von dem kaputten bild bekomme) poste ich mal das script.

    ich hab versucht jede zeile zu kommentieren, damit es verständlich wird, was ich da versuche ;-)

    <?php

    //parser liest quellbild ein
    $quellbild=imagecreatefromjpeg("DCP_0024.jpg");

    //neue breite -> hoehe wird entsprchend skaliert (px)
    $breite_neu = 200;

    //breite und hoehe des quellbildes werden in variablen geschrieben
    $breite = imagesx($quellbild);
    $hoehe = imagesy($quellbild);

    //multiplikator fuer die skalierung errechnen
    $skalierungsfaktor = $breite/$breite_neu;
    //neue hoehe errechnen
    $hoehe_neu = $hoehe/$skalierungsfaktor;

    //Filehandle fuer das 2te Bild, das eigentliche Thumbnail
    $zielbild = imagecreate($breite,$hoehe);

    //kopiert das alte bild in das neue und skaliert nach den letzen 4 faktoren
    $thumb=
    imagecopyresampled($zielbild,$quellbild,0,0,0,0,$breite_neu,$hoehe_neu,$breite,$hoehe);

    ?>

    <html><head><title>Thumbnail-Test</head><body>
    <!-- Ausgabe des Bildes -->
    <?php echo imagejpeg("$thumb"); ?>
    </body></html>

    so, c'est ca.
    ich hoffe, ich hahb nur was übersehen ;-))

    danke für eure hilfe und viele grüße,
    daniel

    hallo,

    in der iX war mal genau der artikel, den du brauchst.
    geh mal auf http://www.heise.de/ix und such mal nach "php gd" oder so.

    mfg, steffen

    1. in der iX war mal genau der artikel, den du brauchst.
      geh mal auf http://www.heise.de/ix und such mal nach "php gd" oder so.

      hi,
      du meinst diesen artikel, oder?
      http://www.heise.de/ix/artikel/2002/05/078/ ;-)))
      den hab ich gelesen und mich auch sehr eng daran gehalten.
      nur leider klappt das nicht so ganz... deswegen auch mein posting hier.

      womit ich probleme habe, ist die ausgabe des eigentlichen thmbnails?

      grüße daniel

  2. Huhu

    du musst das Bild auch als solches im HTML einbinden, also in einem img-Tag.

    z.B.

    <img src="build_thumb.php">

    Viele Grüße

    lulu

    1. <img src="build_thumb.php">

      hi lulu,

      mal ganz langsam für dumme wie mich ;-) :

      ich mache aus meinem script eine eigene datei, bild.php.
      in dem script gebe ich in der letzen zeile das bild aus,
      mit imagejpeg("$thumb");

      aufrufen kann ich das ganze dann mit <img src="bild.php"> in einer anderen datei, z.b. index.php?

      das problem ist nur: wenn ich mir dann die index.php im html-quelltext ansehe, steht da natürlich <img src="bild.php"> obwohl da ja eigentlich <img src="DCP_0022.jpg"> stehen müßte (eben der wert, den imagejpeg() aus dem script ausgibt) ?

      hoffe mal, ich steh nicht zu sehr auf dem schlauch.... ;-))

      grüße
      daniel

      1. wenn ich mir dann die index.php im html-quelltext ansehe,
        steht da natürlich <img src="bild.php"> obwohl da ja eigentlich
        <img src="DCP_0022.jpg"> stehen müßte

        Da Du Dich sowieso _dringendst_ mit dem Gedanken des cachings der thumbnails vertraut machen solltest, würde ich folgende Vorgangsweise empfehlen (es folgt hochgradiger pseudocode):

        function create_thumb($file) {
          do_some_gd_stuff();
          save_thumb($thumb_dir.'/'.$file);
        }

        if(!file_exists($thumb_dir.'/'.$file)) {
          create_thumb($file);
        }
        echo '<a href="'.$file.'"><img src="'.$thumbdir.'/'.$file.'"></a>';

  3. Dein Ansatz ist schon sehr gut, und auch richtig, meiner Meinug nach gehst du an das Debuggen zu kofus ran...
    Wird denn ein Bild erzeugt? willst du (was ja sinn machen würde) das Thumbnail irgendwo speichern?
    Bist du sicher das es korrekt erzeugt wird?
    Lass es doch mal in einem Ordener /thumb oder so abspeichern, dann kannst du leicht prüfen ob es richtig erzeugt wird.

  4. hi,

    <?php echo imagejpeg("$thumb"); ?>

    ich glaube so gehts nicht. Du brauchst eine Datei, die das Bild erzeugt:

    <?php
    header("Content-type: image/jpeg");
    $src    =  $HTTP_GET_VARS['SRC'];
    $img     =  imagecreatefromjpeg($src);
    $imgSize =  getImageSize ($src);

    $nHoch  =  40;
    $factor =  $imgSize[1]/$nHoch;
    $nBreit =  $imgSize[0]/$factor;

    $nImg   =  imagecreate($nBreit, $nHoch);
    $copy   =  imagecopyresized($nImg, $img, 0, 0, 0, 0, $nBreit, $nHoch, $imgSize[0], $imgSize[1]);
    imagejpeg($nImg, "", 95);
    imagedestroy($nImg);
    ?>

    und eine zweite, in die das als source eingebunden wird:

    <html>
    <head>
    </head>
    <body>

    <?php
    $src =  "/home/www/hosts/de/gfx/test/luxus.jpg";
    echo '<img src="makeThumbnail.php?SRC=' . $src . '">';
    ?>

    </body>
    </html>

    so klappts jedenfalls bei mir. Cachen waere natuerlich gut...

    Gruesse  Joachim