PHP GD-Lib grafik skalieren



  • Hi...

    ich überarbeite gerade einen Online-Shop und habe so langsam ein Bischen Zeitdruck...

    Alles fertig nur beim Skallieren der Grafiken hapert´s arg.

    Die Grafiken der Vorschau lagen vorher in einer fixen Breite vor und es musste nur noch die Hoehe angepasst werden. Dies hat mit folgendem Code super funktioniert...

    $mein_bild = @ImageCreateFromJPEG($BildPfad); //Bild aus Datei laden
    
    $breite_max = 120; 
    $hoehe_max = 120; 
    
    $breite = imagesx($mein_bild);
    $hoehe = imagesy($mein_bild);
    
    $breite_neu = $breite;
    $hoehe_neu = $hoehe;
    
    //Breite skalieren falls noetig
    if ($breite > $breite_max)
    {
     $factor = $breite_max / $breite;
     $breite_neu *= $factor;
     $hoehe_neu *= $factor;
    }
    
    //Hoehe skalieren, falls noetig
    if ($hoehe > $hoehe_max)
    {
     $factor = $hoehe_max / $hoehe;
     $breite_neu *= $factor;
     $hoehe_neu *= $factor;
    }
    
    //Neues leeres TrueColor-Bild erzeugen
    $mein_bild_geaendert = imagecreatetruecolor($breite_neu, $hoehe_neu);
    
    //Hintergrund-Farbe des Bildes generieren
    $HintergrundFarbe = ImageColorAllocate($mein_bild_geaendert, 0, 51, 255);
    
    //Bild mit Hintergrundfarbe fuellen
    imagefill($mein_bild_geaendert,0,0,$HintergrundFarbe);
    
    //Bild generieren
    imagecopyresampled($mein_bild_geaendert,$mein_bild,0, 0, 0, 0,$breite_neu, $hoehe_neu, $breite, $hoehe);
    
    //Ausgabe
    header("Content-type: image/png"); //Bei JPEG leidet die Qualitaet
    ImagePNG($mein_bild_geaendert);
    die(); //Script-Bearbeitung stopen
    

    Nun soll die Grafik aber unabhaengig ihrer Ausgangsgröße verkleinert werden (sofern sie groesser ist (z.B. 794x600, 381x348,...) jeweils auf max 120x120px bzw. max 150x150px

    Das obige Script funktionierte ohne Probleme, da die Breite jeweils 120px betrug. Nur stimmen die Proportionen nicht mehr, wenn die Grafiken um einiges groesser sind...

    2. Versuch:

    include('einstellungen.php5');
    
    $artikelnummer = $_REQUEST['artikelnummer'];
    $rabatt = $_REQUEST['rabatt'];
    $id = $_REQUEST['id'];
    $bild_ausrichtung = $_REQUEST['bild_ausrichtung'];
    $hoehe_MAX = $_REQUEST['hoehe_MAX'];
    $breite_MAX = $_REQUEST['breite_MAX'];
    ///////////////////
    //ID formatieren//
    /////////////////
    ///////////////////////////////
    //Wenn $id KUERZER als 4 ist//
    //vorne mit 0 auffuellen   //
    ////////////////////////////
    ////////////////////////
    //Ende ID formatieren//
    //////////////////////
    $id = str_pad("$id", 4, "0", STR_PAD_LEFT); 
    
    $DateiPfad = "$MyURL".'/grafiken/shop/'."$artikelnummer".'-'."$id".'.jpg';
    
    $handle = fopen($DateiPfad,'br'); //Datei fuer BinaeresLesen oeffnen
    
    ////////////////////////////////
    //Wenn Grafik nicht existiert//
    //////////////////////////////
    if(!$handle)
    {
    fclose($handle);
    ...
    }
    /////////////////////////////////////
    //Ende Wenn Grafik nicht existiert//
    ///////////////////////////////////
    else //Wenn Datei existiert
    {
    $mein_bild = @ImageCreateFromJPEG($DateiPfad); //Bild aus Datei laden
    
    $hoehe_max = "$hoehe_MAX"; 
    $breite_max = "$breite_MAX";
    
    $breite = imagesx($mein_bild);
    $hoehe = imagesy($mein_bild);
    
    $skalh=$hoehe_max/$hoehe;
    $skalv=$breite_max/$breite;
    
    $vertikal = "$breite_max";
    $horizontal = "$hoehe_max";
    
    $x2 = imagesx($mein_bild);
    $y2 = imagesy($mein_bild);
    
      if ($skalh < $skalv)
       {
        $y0=round(($vertikal-$y2*$skalh)/2);
        $x0=0;
        $xw=$horizontal;
        $yw=round($y2*$skalh);
      }
       else if ($skalh > $skalv)
       {
        $x0=round(($horizontal-$x2*$skalv)/2);
        $y0=0;
        $xw=round($x2*$skalv);
        $yw=$vertikal;
      }
    
    //Neues leeres TrueColor-Bild erzeugen
    $mein_bild_geaendert = imagecreatetruecolor($breite_max, $hoehe_max);
    
    //Hintergrund-Farbe des Bildes generieren
    $HintergrundFarbe = ImageColorAllocate($mein_bild_geaendert, 0, 51, 255);
    
    //Bild mit Hintergrundfarbe fuellen
    imagefill($mein_bild_geaendert,0,0,$HintergrundFarbe);
    
    //Bild generieren
    //imagecopyresampled($mein_bild_geaendert,$mein_bild,0, 0, 0, 0,$breite_neu, $hoehe_neu, $breite, $hoehe);
    imagecopyresampled($mein_bild_geaendert,$mein_bild, $x0, $y0, 0, 0, $xw, $yw, $x2, $y2);
    
    //Ausgabe
    header("Content-type: image/png"); //Bei JPEG leidet die Qualitaet
    ImagePNG($mein_bild_geaendert);
    
    } //Ende wenn Datei existiert
    

    2.Versuch stammt wurde aus einem Tut. von hoffmann.bplaced.net abgeleitet...

    http://hoffmann.bplaced.net/hilfe.php?me=php&in=bildskalieren#skaliere

    Hat damit jemand Erfahrung und kann mir ein Stück auf die Sprünge helfen ??

    Danke ==>Eisbeer<==



  • Ich selber habe keinen Tipp, aber mein Mathebuch 9.tes Schuljahr würde wohl den Dreisatz empfehlen 😉


Anmelden zum Antworten