Bild hochladen, verkleinern und zuschneiden

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Bild hochladen, verkleinern und zuschneiden

    Hallo,

    eins vorweg: PHP ist absolutes Neuland für mich. Bin seit ein paar Tagen dabei mich da rein zu fuchsen.

    Doch nun zu meinem Problem:
    Ich möchte ein Bild-Upload-Formular bauen, bei dem das Bild auf 255x234px verkleinert wird. Dazu habe ich auch schon ein Script hier im Forum gefunden und nach meinen Bedürfnissen angepasst. Mein Problem ist derzeit noch, dass das Bild gestaucht wird. Ich möchte aber, dass bei dem Bild je nach Format an den Seiten was abgeschnitten wird.

    Habe schon rausgefunden, dass das irgendwie mit "ImageCopyResized" gehen soll. Aber ich kriegs einfach nicht hin.

    PHP-Code:
    $K_MB 255;
    $K_MH 234;

     
    $k_size getimagesize ("$UPLOADPIC");


        
    $K_UPLOADPIC "$UPLOADPIC";


        if (
    $K_NH $K_MH)
            {

            }
        else
            {


            
    $ProportionFaktor $K_NH $K_MH;
            
    $K_NH $K_MH;
            
    $K_NB  round($K_NB $ProportionFaktor);
            }
            
            
        if (
    $k_size[0] < $K_MB)
            {

            
    $K_NB $k_size[0];
            
    $K_NH  $k_size[1];
            }
        else
            {

            
    $ProportionFaktor $k_size[0] / $K_MB;
            
    $K_NB $K_MB;
            
    $K_NH  round($k_size[1] / $ProportionFaktor);
            }


        if (
    $k_size[0] == $K_NB && $k_size[1] == $K_NH)
            {
            
    $UPLOADPIC_name "$pic.jpg";
            
    // Da mußte das Bild nicht verkleinert werden
            
    copy ($K_UPLOADPIC"images/$UPLOADPIC_name");
            echo 
    "$pic.jpg = pic<br>bild kann so bleiben<br>";
            }
        else
            {
            
    $UPLOADPIC_name "$pic.jpg";
            
    // Hier wird PIC verkleinert und gespeichert
            
    $td=imageCreateTrueColor(255234);
            
    $ts=imageCreateFromJPEG($K_UPLOADPIC);
            
    imageCopyResampled($td$ts0000255234$k_size[0], $k_size[1]);
            
    imageJPEG($td,"images/$UPLOADPIC_name");
            echo 
    "Das Bild heisst jetzt $pic.jpg<br><br>";
            echo 
    '<img src="images/'.$pic.'.jpg" border="0"></p>';
            }

        
        } 
    Vielleicht sollte ich dazu sagen, dass ich die Berechnung von Höhe und Breite in dem Script vertauscht habe. Ich hoffe, dass das kein Fehler war...

    Ich würde mich sehr freuen, wenn mir jemand helfen könnte!
    Zuletzt geändert von konkav; 06.07.2007, 15:32.

  • #2
    imagecopyresampled (dst_image, src_image, dst_x, dst_y, src_x, src_y, dst_w, dst_h, src_w, src_h )

    dabei sind die parameter wie folgt:
    dst_image = der handler für die Zielgrafik
    src_image = der handler der Originalgrafik
    dst_x = wo soll der kopierte Ausschnitt im neuen Bild beginnen (links, typischerweise bei deinem vorhaben 0)
    dst_y = wo soll der kopierte Ausschnitt im neuen Bild beginnen (oben, typischerweise bei deinem vorhaben 0)
    src_x = von links der beginn des Ausschnitts, der kopiert werden soll im original
    src_y = von oben der beginn des zu kopierenden Ausschnitts
    dst_w = wie breit (gestaucht oder gestreckt) soll der kopierte Ausschnitt hinterher im Ziel sein
    dst_h = wie hoch wird der Ausschnitt gezogen
    src_w = wie viele pixel breit soll beginnend bei src_x kopiert werden
    src_h = wie viele pixel hoch soll beginnend bei src_y kopiert werden


    als beispiel mal eine 400x400 grafik auf 200x300 zuschneiden, ohne zu stauchen/strecken

    imagecopyresampled($ziel, $original, 0, 0, 101, 51, 200, 300, 200, 300)

    die werte musst du dann eben ausrechnen lassen. wenn du mittig zuschneiden willst entsprechend (originalbreite-zielbreite)/2 wäre jeweils das, was links und rechts weggeschnibbelt werden muss... ein pixel mehr entspricht also src_x

    damit sollte es dann gehen... die werte hast du ja bereits in variablen liegen...

    greetz, high
    Good programming is 40% experience, 20% skill, 20% RTFM, 15% caffeine, and 5% attention to detail.
    When everything else fails, manipulate the data...
    Beschriftungen / Großformatdruck / Werbemittel

    Kommentar


    • #3
      Super. Vielen Dank schon mal für die ausführliche Erklärung. Werde es mal ausprobieren...

      Kommentar


      • #4
        Das klappt so gaaar nicht. Jetzt hab ich nur noch n Ausschnitt des Bildes und schwarze Ränder unten und rechts...

        PHP-Code:
            $breitemitte round($k_size[0]-255) / 2;
            
        $hoehemitte round($k_size[1]-234) / 2;
                
        $UPLOADPIC_name "$pic.jpg";
                
        // Hier wird PIC verkleinert und gespeichert
                
        $td=imageCreateTrueColor(255234);
                
        $ts=imageCreateFromJPEG($K_UPLOADPIC);
                
        //imageCopyResampled($td, $ts, 0, 0, 0, 0, 255, 234, $k_size[0], $k_size[1]);
                
        imagecopyresampled($td$ts00$breitemitte$hoehemitte255234$k_size[0], $k_size[1]); 
        ($k_size[0] & $k_size[1] sind Original-Breite und -Höhe, richtig?)

        Was mache ich falsch?
        Zuletzt geändert von konkav; 06.07.2007, 16:56.

        Kommentar


        • #5
          PHP-Code:
          imagecopyresampled($td$ts00$breitemitte$hoehemitte255234255234); 
          sollte eigentlich gehen...
          der ausschnitt, den du kopieren möchtest, ist ja immer gleich groß, nämlich genausogroß, wie das zielbild... wenn du andere ausschnitte kopieren möchtest (etwa verkleinern, bis eine seite rein passt, und nur in der anderen richtung beschneiden), musst du noch mehr rumrechnen... aber dein ansatz stimmt schon...

          greetz, high
          Good programming is 40% experience, 20% skill, 20% RTFM, 15% caffeine, and 5% attention to detail.
          When everything else fails, manipulate the data...
          Beschriftungen / Großformatdruck / Werbemittel

          Kommentar


          • #6
            Original geschrieben von highrise
            [B]wenn du andere ausschnitte kopieren möchtest (etwa verkleinern, bis eine seite rein passt, und nur in der anderen richtung beschneiden)
            genau das war eigentlich der plan. dachte eigentlich, dass das verkleinern schon weiter oben im script passiert ist. Hmm... werde dann mal weiter Variablen jonglieren...
            Zuletzt geändert von konkav; 06.07.2007, 23:32.

            Kommentar

            Lädt...
            X