[GD] imagecopyresized

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

  • [GD] imagecopyresized

    Ich dreh durch ...
    Seit wochen bastle ich nun schon daran und nix geht ...

    Könnte mir bitte bitte bitte mal einer abseits von selfphp die parameter von imagecopyresized erklären?

    Mein Anliegen:
    Ein hochgeladenes Bild mit der Breite 200 px in der neuen Breite 150 Pixel in drei Variationen speichern:
    1. die letzten 50 Pixal abschneiden
    2. 25 pixel links, 25 pixel rechts abschneiden
    3. die ersten 50 pixel abschneiden

    und das ganze ohne schwarze Trauerränder.

    *seufz*

    Yeah !

  • #2
    ist das denn so missverständlich? ... poste mal bitte deinen versuch.
    Kissolino.com

    Kommentar


    • #3
      manual + ein bisschen Englisch sollte helfen...

      Kommentar


      • #4
        PHP-Code:
        // wenn das höhe-breiten verhältnis 1,33 entspricht nur einschrumpfen
        if (round(($groesse[1]/$groesse[0]),2) == 1.33) {
          
        $picname6=$z."_6.jpg";
          
        $hei=375;
          
        $wid=280;
          
        $bildneu=imagecreatetruecolor($wid,$hei);
          
        imagecopyresized$bildneu$bildalt0,00,0$wid$hei$groesse[0], $groesse[1]);

          
        //bild, neuer name, Qualität
          
        imagejpeg($bildneu$picname675);
          
        imagedestroy($bildneu);
        }
        else {
           
        //hier wird das Bild zwar nach rechts verschoben, bekommt aber links nen trauerrand
           // Bild-Vorschlag 7
          
        $picname7=$z."_7.jpg";
          
        $hei=($groesse[1]*280)/$groesse[0];
          
        $wid=280;
          
        $bildneu=imagecreatetruecolor($wid,$hei);
          
        imagecopyresized$bildneu$bildalt150,00,0$wid$hei$groesse[0], $groesse[1]);
          
        //bild, neuer name, Qualität
          
        imagejpeg($bildneu$picname775);
          
        imagedestroy($bildneu);

          
        // hier wird das Bild nach links verschoben, der trauerrand ist rechts
          // Bild-Vorschlag 8
          
        $picname8=$z."_8.jpg";
          
        $hei=($groesse[1]*280)/$groesse[0];
          
        $wid=280;
          
        $bildneu=imagecreatetruecolor($wid,$hei);
          
        imagecopyresized$bildneu$bildalt0,0150,0$wid$hei$groesse[0], $groesse[1]);
          
        //bild, neuer name, Qualität
          
        imagejpeg($bildneu$picname875);
          
        imagedestroy($bildneu);

          
        // und hier wird alles verzerrt
          // Bild-Vorschlag 9
          
        $picname9=$z."_9.jpg";
          
        $hei=($groesse[1]*280)/$groesse[0];
          
        $wid=280;
          
        $bildneu=imagecreatetruecolor($wid,$hei);
          
        imagecopyresized$bildneu$bildalt0,0150,0, ($wid-150), $hei, ($groesse[0]-150), $groesse[1]);
          
        //bild, neuer name, Qualität
          
        imagejpeg($bildneu$picname975);
          
        imagedestroy($bildneu);


        ich habs schon auf tausend andere weisen versucht, aber irgendwie will das alles nicht so klappen, wie ich es mir vorstelle ...

        wers testen will
        klickt hier
        Yeah !

        Kommentar


        • #5
          imagecopyresized ( resource dst_im, resource src_im, int dstX, int dstY, int srcX, int srcY, int dstW, int dstH, int srcW, int srcH)
          denken wir mal laut:
          => basis: ein bild 200x200px soll später haben

          1. 200 x 150 px (rechts 50 weg)
          $dst_im = imagecreatetruecolor(150,200);
          $src_im = $altesbild;
          $dstX = 0; // starte im ziel bei 0
          $dstY = 0;
          $srcX=0; // verschiebe src um 0
          $srcY=0;
          $dstH=200;
          $dstW=150;
          $srcH=200;
          $srcW=200;


          2. 200 x 150 px (rechts/links 25 weg)
          $dst_im = imagecreatetruecolor(150,200);
          $src_im = $altesbild;
          $dstX = 0; // starte im ziel bei 0
          $dstY = 0;
          $srcX=-25; // verschiebe src um 0
          $srcY=0;
          $dstH=200;
          $dstW=150;
          $srcH=200;
          $srcW=200;

          3. 200 x 150 px (links 50 weg)
          $dst_im = imagecreatetruecolor(150,200);
          $src_im = $altesbild;
          $dstX = 0; // starte im ziel bei 0
          $dstY = 0;
          $srcX=-50; // verschiebe src um 0
          $srcY=0;
          $dstH=200;
          $dstW=150;
          $srcH=200;
          $srcW=200;


          ^^ ungetestet, sollte aber gehen
          Kissolino.com

          Kommentar


          • #6
            Es ist doch zum Heulen ...
            seit exakt 3 Stunden sitze ich nun dran und versuche das einzubauen, was
            Danke Dir, hat mir schon mal sehr weiter geholfen - zumindest hab ich jetzt erkannt, daß mein Fehler anscheinend doch wo anders liegt
            denn sobald ich es anpasse, läuft es nicht mehr. ...

            Also mal zur Erklärung, was ich plane:

            Ich möchte, daß ein Bild, wenn es hochgeladen wird in exakte masse gezwängt wird, ohne verzerrt zu werden - überstehende Pixel werden einfach abgeschnitten - egal, ob das original 16:9, hochformat, querformat oder was auch immer hat.

            Mein Ansatz dazu sieht so aus, aber irgendwo muß ein Denkfehler drin sein oder mein mathematisches Talent hat mich mal wieder völlig im Stich gelassen.
            PHP-Code:
            $faktor=$groesse[1]/$hei;
            $hei=300;
            $wid=280;
            $bildneu=imagecreatetruecolor($wid,$hei);
            imagecopyresized$bildneu$bildalt, ($groesse[0]-$wid),000$wid$hei$groesse[0], $groesse[1]); 
            wer sehen will, was draus wird - der link oben funzt noch ;-)
            Yeah !

            Kommentar


            • #7
              PHP-Code:
              $faktor=$groesse[1]/$hei;
              $hei=300
              du hast die falsche reihenfolge! Du kannst eine Var doch nicht benutzen, bevor sie definiert ist!!!

              Kommentar


              • #8
                hmm ... ich hab so ne kleine klasse geschrieben, die das kann ... aber du
                willst dir das selbst erarbeiten ...

                im prinzip ist das simpel:
                - eingangsbild 200x300
                - zielbild 100x100
                heisst: verkleinere eingangsbild um 50% und clippe den rest

                da du es aber mit verschiedenen formaten zu tun haben kannst:
                - hochformat
                - querformat
                - quadratisch

                musst du über eine bedingung den richtigen faktor ermitteln und
                höhen/breiten zuweisen... pseudocode:

                if(breite > höhe)
                {
                rechne ...
                }
                elseif(höhe > breite)
                {
                rechne anders
                }
                else
                {
                rechne quadrat
                }

                gleiches gilt für das zielbild ... ist es quadratisch, ist die berechnung einfach,
                da nur die ^^ berechnung zieht, ist es rechteckig (hoch/quer) musst du
                das mit dem eingangsbild in relation setzen ... sähe blöd aus, wenn ein
                hochformat-eingangsbild für ein querformat-ausgangsbild falsch berechnet
                wird. also wieder der vergleich zwischen ist und soll.

                am einfachsten malst du dir das wirklich mal auf ... schreibst einen
                pseudocode ... und setzt es dann in php um.
                Kissolino.com

                Kommentar

                Lädt...
                X