Felix: Fotos beim Upload automatisch zuschneiden

Hi Leute ! Vielleicht kann mir jemand helfen, ich hab da nämlich son Problem:

Auf meiner neuen Homepage kann sich jeder User sein Foto hochladen. Wenn das aber ein 5 Megapixelbild ist, ist das ja nachher auf der Seite 10X15 Meter! Wenn ich aber einstelle, dass es z.B. auf 150X100 Pixel zugeschnitten werden soll, und das Foto ist mal nihct hoch-sondern Quer, dann ist auch alles verzerrt ! Gibts da nihct ne Möglichkeit? Und wnns geht könntet ihr mir bitte den gesamten Quelltext geben (Uploadfunktion auch), da ich dies nur aus ner Vorlage hab, die ich noicht versteh.

Wär echt lieb. danke.

Euer FELIX.

  1. nicht von mir : aber müsst helfen. Brauchst halt die GDLib auf deinem Server.

    Script - thumbnail_20.php

    <?php
    function thumb($file, $save, $width, $height, $prop = TRUE) {
        // Requires GD-Lib > 2.0
        // Ist $prop=TRUE, so werden die Proportionen des Bildes
        // auch im Thumbnail eingehalten

    @unlink($save);
        $infos = @getimagesize($file);
        if($prop) {
            // Proportionen erhalten
            $iWidth = $infos[0];
            $iHeight = $infos[1];
            $iRatioW = $width / $iWidth;
            $iRatioH = $height / $iHeight;
            if ($iRatioW < $iRatioH)
            {
            $iNewW = $iWidth * $iRatioW;
            $iNewH = $iHeight * $iRatioW;
            } else {
            $iNewW = $iWidth * $iRatioH;
            $iNewH = $iHeight * $iRatioH;
            } // end if
        } else {
            // Strecken und Stauchen auf Größe
            $iNewW = $width;
            $iNewH = $height;
        }

    if($infos[2] == 2) {
            // Bild ist vom Typ jpg
            $imgA = imagecreatefromjpeg($file);
            $imgB = imagecreatetruecolor($iNewW,$iNewH);
            imagecopyresampled($imgB, $imgA, 0, 0, 0, 0, $iNewW,
                               $iNewH, $infos[0], $infos[1]);
            imagejpeg($imgB, $save);
        } elseif($infos[2] == 3) {
            // Bild ist vom Typ png
            $imgA = imagecreatefrompng($file);
            $imgB = imagecreatetruecolor($iNewW, $iNewH);
            imagecopyresampled($imgB, $imgA, 0, 0, 0, 0, $iNewW,
                               $iNewH, $infos[0], $infos[1]);
            imagepng($imgB, $save);
        } else {
            return FALSE;
        }
    }

    // Quelldatei
    $from = "./meinverzeichnis/an9-6.jpg";
    // Ziel 1+2
    $to1 = "./th/thumb_a.jpg";
    $to2 = "./th/thumb_b.jpg";

    // Funktionsaufruf mit Einbehaltung der Proportionen
    thumb($from, $to1, 150, 150, TRUE);
    // Funktionsaufruf ohne Einbehaltung der Proportionen
    thumb($from, $to2, 150, 150, FALSE);
    ?>

    servus

  2. Hello,

    schau Dir mal die Beschreibung zu den image*-Funktionen an.

    Hier einfach ein Ausschnitt aus meiner Funktion.
    Die speichert das Originalbild und ein Miniaturbild in der Breite $thumbwidth ab.

    $src_img=ImageCreatefromjpeg($picname); //Quellbild im Speicher auspacken

    $qx=imagesx($src_img);                 //Maße des Quellbides bestimmen
        $qy=imagesy($src_img);

    $tx=$thumbwidth;                       //Breite des Zielbildes festlegen
        $ty=($thumbwidth/$qx)*$qy;                     //Höhe des Zielbildes berechnen

    if (!function_exists("gd_info"))

    warum ich das so erfragt habe, weiß ich heute auch nicht mehr...

    {
          $dst_img=imagecreate($tx,$ty);         //Zielbild im Speicher vorbereiten
        }
        else
        {
          $dst_img=imagecreateTrueColor($tx,$ty); //neue Funktion benutzen
        }

    //Zielbild erzeugen
        imagecopyresized($dst_img,$src_img,0,0,0,0,$tx,$ty,$qx,$qy);

    //Zielbild speichern
        imagejpeg($dst_img,$thumbname);

    imagedestroy($src_img);                //Arbeitsspeicher für Arbeits-
        imagedestroy($dst_img);                //kopien der Bilder freigeben.

    return $imgdata;

    Grüße

    Tom