Du bist nicht angemeldet.

  • »Rosi-janni« ist der Autor dieses Themas

Beiträge: 522

Wohnort: Wittlich

Beruf: Schüler

Hobbys: Motorsport, Coden, Twitter: rosijanni

  • Private Nachricht senden

1

Sonntag, 5. Juni 2011, 12:33

PHP- Image resize- Nur wie?

Hallöchen!

Wie schon im letzten Thread angekündigt, habe ich ein weiteres Problem mit PHP.
Ich habe Bilder, in ihrer Größe variabel, die ich auf eine maximal Größe skalieren will. Wie macht man das am besten in PHP? Ich will die Bilder ja nicht stur runter skalieren, sondern, die Bilder runter skalieren, ohne sie zu verzerren.
Was soll ich da tun?

Danke Euch,
Jan!

Beiträge: 1 496

Wohnort: Kölle

Beruf: Schüler

Hobbys: Handball

  • Private Nachricht senden

2

Sonntag, 5. Juni 2011, 12:50

Wenn du schon sagst verzerren:
Haben die Bilder ein anderes Format, also verhältnis der Seiten?
Wenn ja, kannst du ja eh nur eine Seite gleich groß machen, ohne es zu zerren.
Gruß

Robin

Beiträge: 6 391

Wohnort: Herdecke

Beruf: Selbständig

Hobbys: Gleitschirmfliegen, RC-Helikopter, Faustball

  • Private Nachricht senden

3

Sonntag, 5. Juni 2011, 13:13

Hm was sind denn Bilder in PHP ?

Also die Bilder müssen ja irgendwie als Datei vorliegen und das Anzeigen macht ja letztendlich der erzeugt HTML Code. Und der gibt dann ja an ob skaliert/gekachelt oder zentriert wird und in welchem Container es sitzt etc.

Gruß

Claus
Pre-Kaffee-Posts sind mit Vorsicht zu geniessen :)

4

Sonntag, 5. Juni 2011, 13:14

Arbeite doch mit:

Quellcode

1
2
 $image_details = getimagesize($source_image);
 $source = imagecreatefromjpeg($source_image); // gibt es auch für png !



Seitenverhältnisse ausrechen, im Verhältnis zu den neuen Größen setzten, neue Größen berechnen und mit

Quellcode

1
2
 $dest = imagecreatetruecolor($b, $h);
 imagecopyresized($dest,$source,0,0,0,0,$b,$h,$width,$height);
weiter arbeiten.


Hinweis: GD Bibliothek von PHP ! Gibt es mehrfach im Netz als Beispiele.
Si tacuisses, philosophus mansisses !

5

Sonntag, 5. Juni 2011, 13:14

Entweder du bringst alle auf eine einheitliche Breite oder Höhe oder du croppst einen definierten Ausschnitt aus dem Bild. Beides funktioniert am besten mit ImageMagick

lg

6

Sonntag, 5. Juni 2011, 13:25

Wie wäre es, wenn du das Seitenverhältnis bestimmst (Breite/Höhe), dann die Breite auf deine maximale Breite setzt und die Länge der unteren Seite gleich dem Produkt des Seitenverhältnisses und der maximalen Breite nimmst?

P

7

Sonntag, 5. Juni 2011, 14:05

Wie wäre es, wenn du das Seitenverhältnis bestimmst (Breite/Höhe), dann die Breite auf deine maximale Breite setzt und die Länge der unteren Seite gleich dem Produkt des Seitenverhältnisses und der maximalen Breite nimmst?

Das geht, aber kann immer noch zu großen Portrait-Bildern führen. Ich mache das immer so (Pseudocode):

Quellcode

1
2
3
4
5
6
double scaleX = maxWidth / originalWidth;
double scaleY = maxHeight / originalHeight;
double scale = min(scaleX, scaleY);
//optional: Vergrößern verhindern: if (scale>1.0) scale=1.0;
double scaledWidth = originalWidth * scale;
double scaledHeight = originalHeight * scale;

originalWidth/originalHeight ist die unskalierte Größe des Bildes, maxWidth/maxHeight ist die gewünschte maximale Bildbreite/Höhe. scaledWidth/scaledHeight ist die resultierende Bidlgröße.
Multigrad - 360°-Produktfotografie für den Mac

8

Sonntag, 5. Juni 2011, 15:55

Zitat

Das geht, aber kann immer noch zu großen Portrait-Bildern führen.
Würde behoben, wenn man das Verfahren auf beide Seiten anwendet, oder?

@Rosi-Janni:

Das Rechenbeispiel, um das du gebeten hattest:
Angenommen, wir haben ein Bild von 800x600px. Dann ist das Verhältnis (Höhe/Breite) = 600/800 = 0,75.
Wollen wir das Bild nun auf eine maximale Breite von 200px bringen, Setzen wir die Breite = 200px und berechnen die Höhe mit 200px * 0,75 = 150px.
Damit hast du nun ein proportional verkleinertes Bild des Originals, egal wie groß das Ausgangsbild war.
Wie mattik aber richtig gesagt hat, kann es trotzdem zu Bildern kommen, die extrem in die Höhe oder Breite gehen. In dem Falle musst du die zweite Seite auch noch nach demselben Muster berechnen.

P

  • »Rosi-janni« ist der Autor dieses Themas

Beiträge: 522

Wohnort: Wittlich

Beruf: Schüler

Hobbys: Motorsport, Coden, Twitter: rosijanni

  • Private Nachricht senden

9

Sonntag, 5. Juni 2011, 16:28

Das sind, beide Verfahren, recht plausible, wenn auch das Verfahren von Tobi2357 mir sinnlicher erscheint.
Ich lasse mir das mal mit ein paar Beispielen durch den Kopf gehen.

Wenn jemand noch einen Hinweis hat, bitte danke!

10

Sonntag, 5. Juni 2011, 16:32

Wenn jemand noch einen Hinweis hat, bitte danke!

Ja. Nimm so kariertes Papier und mal Dir drei verschieden grosse Rechtecke hin. Dann malst Du an die Seiten so Grössen und überlegst, wie Du die ins Verhältnis setzen musst, damit Du bekommst, was Du willst. Geht echt immer gut, dafür ist dies karierte Papier ein echter Knaller!
C++

  • »Rosi-janni« ist der Autor dieses Themas

Beiträge: 522

Wohnort: Wittlich

Beruf: Schüler

Hobbys: Motorsport, Coden, Twitter: rosijanni

  • Private Nachricht senden

11

Sonntag, 5. Juni 2011, 18:14

Oh, tut mir leid.
Ich glaube ich habe die Lösung gefunden.
Die Shell macht mit convert -resize ein Resize, was nichts verzerrt.

Beiträge: 941

Wohnort: Berlin

Beruf: Application Developer

Hobbys: Ja

  • Private Nachricht senden

12

Montag, 6. Juni 2011, 09:52

genau... ich würde keine bilder mit GD bearbeiten.
benutze imagemagick per exec oder sonst wie :)

jeder bessere Provider hat das auf seinen Servern und wenn nicht kann man es meist nachinstallieren lassen :)
俺の世界にようこそ

13

Montag, 6. Juni 2011, 10:33

genau... ich würde keine bilder mit GD bearbeiten.
benutze imagemagick per exec oder sonst wie :)

jeder bessere Provider hat das auf seinen Servern und wenn nicht kann man es meist nachinstallieren lassen :)



Warum nicht ? Ich hatte bisher keine Probleme damit ?
Si tacuisses, philosophus mansisses !

Beiträge: 941

Wohnort: Berlin

Beruf: Application Developer

Hobbys: Ja

  • Private Nachricht senden

14

Montag, 6. Juni 2011, 17:10

ich hab früher ein php script mit GD als image proxy benutzt leider hatte ich doch ein zu großen qualitätsverlust damit gehabt (fragmente)
俺の世界にようこそ

Social Bookmarks