Sven Rautenberg: Brauche Hilfe bei "imagecopyresized"-Funktion

Beitrag lesen

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:|