Grafiken auf maximal 150x120 px skallieren



  • Hallo,

    wie könnte mann vorgehen, um Grafiken per PHP und GD-Lib zu skallieren, so dass das Ausgabebild nicht größer als 150x120px wird. Bei kleineren Bildern ist es egal nur dürfen sie halt nicht größer sein.

    Momentan ändere ich die Bildgroesse einfach auf /2 was nur nicht immer hinhaut, da die Grafiken unterschiedliche Höhen haben. Die Breite ist dagegen bei allen Grafikeen gleich.

    function MyFunction_Grafik_generieren($MySessionID)
    {
    $BildPfad = '/grafiken/0001.jpg';
    
    $mein_bild = @ImageCreateFromJPEG($BildPfad); //Bild aus Datei laden
    
    //Original Breite und Hoehe des Bildes holen
    $original_breite = imagesx($mein_bild);
    $original_hoehe = imagesy($mein_bild);
    
    //Neue Breite und Hoehe des Bildes
    $neue_breite = $original_breite / 2;
    $neue_hoehe = $original_hoehe / 2;
    
    //Groesse aendern
    $mein_bild_geaendert = imagecreatetruecolor($neue_breite, $neue_hoehe);
    imagecopyresampled($mein_bild_geaendert, $mein_bild, 0, 0, 0, 0, $neue_breite, $neue_hoehe, $original_breite, $original_hoehe);
    
    //Ausgabe
    header ("Content-type: image/png"); //Bei JPEG leidet die Qualitaet
    ImagePNG($mein_bild_geaendert);
    die(); //Script-Bearbeitung stopen 
    } //Ende MyFunction_Grafik_generieren
    

    Leider ist mir nicht bekannt wie man mein Vorgehen nennt, also ist auch die Suche etwas kompliziert.

    CU==>Eisbeer<==



  • dann teile doch nicht durch 2, sondern rechne dir einen passenden faktor aus den bekannten größen aus. wo liegt denn dein problem genau? ist es das ausrechnen oder das programmieren?



  • Mein Problem liegt mehr an der Berechnung. Momentan habe ich es so gelößt...
    Nur scheint es bei näherer Betrachtung nicht zum Original-Bild zu passen

    [php]
    function MyFunction_Grafik_generieren(MySessionID) { BildPfad = '/grafiken/0001.jpg';

    meinbild=@ImageCreateFromJPEG(mein_bild = @ImageCreateFromJPEG(BildPfad); //Bild aus Datei laden

    //Original Breite und Hoehe des Bildes holen
    original_breite=imagesx(original\_breite = imagesx(mein_bild);
    original_hoehe=imagesy(original\_hoehe = imagesy(mein_bild);
    **
    //Neue Breite und Hoehe des Bildes
    if("original_hoehe" > 115) { neue_hoehe = 115 * round("original_hoehe"/"original\_hoehe" / "original_breite");
    neue_breite="neue\_breite = "neue_hoehe" * round("original_breite"/"original\_breite" / "original_hoehe");
    }

    else
    {
    neue_hoehe="neue\_hoehe = "original_hoehe";
    neue_breite="neue\_breite = "original_breite";
    }
    **
    //Groesse aendern
    mein_bild_geaendert=imagecreatetruecolor(mein\_bild\_geaendert = imagecreatetruecolor(neue_breite, neue_hoehe);imagecopyresampled(neue\_hoehe); imagecopyresampled(mein_bild_geaendert, $mein_bild, 0, 0, 0, 0, $neue_breite, $neue_hoehe, $original_breite, $original_hoehe);

    //Ausgabe
    header ("Content-type: image/png"); //Bei JPEG leidet die Qualitaet
    ImagePNG ($mein_bild_geaendert);
    die(); //Script-Bearbeitung stopen
    } //Ende MyFunction_Grafik_generieren
    [/php]

    ==>Eisbeer<==



  • sollte funktionieren...

    $w = deine_original_breite;
    $h = deine_original_hoehe;
    
    $nw = neue_breite;
    $nh = neue_hoehe;
    
    bool useHeight;
    
    $i = $nh * $w / $h;
    
    useHeight = ( $i <= $nw );
    
    if ( useHeight )
    {
        $w = $i;
        $h = $nh;
    }
    else
    {
        $h = $nw * $h / $w;
        $w = $nw;
    }
    
    // in $w und $h sind nun die neuen Werte
    

Anmelden zum Antworten