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