Koontz: Brauche Hilfe bei "imagecopyresized"-Funktion

Hi,

ich möchte mir der imagecopyresized-Funktion folgendes realisieren:

Nehmen wir an das zu bearbeitende Bild hat eine Grösse von 400 x 250 Pixel. Das Bild soll nun auf eine Grösse von 200 x 200 Pixel gebracht werden.

Dafür soll das Bild als erstes gestaucht werden. Die kürzere Seite vom Bild (in unserem Fall die Bildhöhe mit 250 Pixel) wird also zuerst ohne Bildverluste auf 200 Pixel gestaucht. Nun haben wir ein Bild mit 350 x 200 Pixel. Da das Bild am Ende allerdings 200 x 200 Pixel haben soll, müssen wir noch 150 Pixel von der Bildbreite abschneiden. Dabei soll an der rechten und der linken Seite vom Bild gleichviel abgeschnitten werden. Also an jeder Seite 75 Pixel.

Genauso soll es gemacht werden, wenn das Quellbild beispielsweise 300 x 500 Pixel gross ist, also das Bild mehr hoch als breit ist. Dann wird halt von der Höhe was abgeschnitten.

Wie lässt sich das nun mit der imagecopyresized-Funktion bewerkstelligen. Durch die ganzen Parameter bekomme ich langsam einen Knoten im Hirn. Wäre nett, wenn mir da jemand weiterhelfen könnte.

Gruss,
Koontz

  1. Moin!

    ich möchte mir der imagecopyresized-Funktion folgendes realisieren:

    ...mit der imagecopyresampled-Funktion würde es sogar noch nett aussehen...

    Nehmen wir an das zu bearbeitende Bild hat eine Grösse von 400 x 250 Pixel. Das Bild soll nun auf eine Grösse von 200 x 200 Pixel gebracht werden.

    Dafür soll das Bild als erstes gestaucht werden. Die kürzere Seite vom Bild (in unserem Fall die Bildhöhe mit 250 Pixel) wird also zuerst ohne Bildverluste auf 200 Pixel gestaucht. Nun haben wir ein Bild mit 350 x 200 Pixel.

    Du willst von 250 Pixeln ohne Änderung der Seitenverhältnisse auf 200 Pixel verkleinern. Das entspricht einem Verkleinerungsfaktor von 200/250, oder auch 0,8. Dementsprechend ist die zweite Seite dann 400*0,8 = 320 Pixel hoch, nicht 350 Pixel!

    Da das Bild am Ende allerdings 200 x 200 Pixel haben soll, müssen wir noch 150 Pixel von der Bildbreite abschneiden. Dabei soll an der rechten und der linken Seite vom Bild gleichviel abgeschnitten werden. Also an jeder Seite 75 Pixel.

    Da du nicht von 350, sondern nur von 320 Pixeln Breite etwas abschneiden willst, mußt du logischerweise weniger abschneiden. :)

    Wie lässt sich das nun mit der imagecopyresized-Funktion bewerkstelligen. Durch die ganzen Parameter bekomme ich langsam einen Knoten im Hirn. Wäre nett, wenn mir da jemand weiterhelfen könnte.

    Du gibst grundsätzlich vier Parameter an für die Koordinaten der Quelle, und weitere vier für die Koordinaten des Ziels.

    Das Ziel ist simpel: Es beginnt bei 0,0 und ist 200 Pixel breit und hoch.

    Die Quelle ist nicht so simpel.

    Du mußt zuerst wissen, welche Bildseite die kürzere ist. Dann schneidest du ein _quadratisches_ Bild aus der Quelle heraus. Das bedeutet: Du beginnst entweder in der Ecke bei 0,y oder bei x,0 - je nachdem, wie groß dein Bild ist.

    Die Koordinate von x oder y berechnet sich aus der überstehenden Bildkante. Wenn du ein 250 Pixel breites Bild hast, welches 400 Pixel hoch ist, schneidest du 250x250 Pixel aus der Mitte aus. Oben und unten fallen Pixel weg, und zwar (400-250) / 2 Pixel je oben und unten. Das ist gleichzeitig deine Anfangskoordinate. Die anzugebende Bildbreite in x und y-Richtung ist 250 Pixel.

    Den Rest erledigt imagecopyresized/resampled.

    - Sven Rautenberg

    --
    ss:) zu:) ls:[ fo:} de:] va:) ch:] sh:) n4:# rl:| br:< js:| ie:( fl:( mo:|
    1. Hi Sven,

      erstmal vielen Dank für Deine schnelle Antwort.
      aber wie kann ich es denn erreichen, dass das quadratisches Bild direkt aus der Mitte ausgeschnitten wird? Ein Codebeispiel wäre nicht schlecht.

      Gruss,
      Koontz

      1. Ach, jetzt hab ich's kapiert :-)
        Die Anfangskoordinate berechnet sich ja aus der überstehenden Bidkante welche man von der Gesamthöhe/breite abzieht und dann durch zwei teilt :-)

        Gruss,
        Koontz