Bild-Größen-Berechnungen in Perl und richtig Scalieren
Aqua
- perl
0 Cheatah0 Andres Freund0 Klaus Mock
Hallo!
Eine Seite für Kontakte bietet die Möglichkeit,
ein Bild von sich selbst online zu stellen.
Der user muss einen URL zum Bild angeben,
das heißt für den Webspace wo das Bild abgelagert ist,
muß er selber sorgen.
Damit das Seiten-Layout aber nicht zerstört wird,
ist es wichtig, dass das Bild eine gewisse grösse nicht überschreitet.
Klarerweise könnte ich hergehen,
jedes Bild akzeptieren so wie der User den URL sagt,
und es einfach mit width und height auf die richtige
größe scalieren, aber....
nun der Hacken *gg*
Wenn das Bild unter 200x100 Pixel ist, soll er es lassen wie es ist,
egal welche Maße es hat, Hauptsache kleiner als 200x100
Wenn das Bild grösser ist als 200x100 soll Perl es kleiner darstellen,
das heißt also width und height dementsprechend einstellen.
Aber: auch nicht einfach nur scalieren,
sondern Berechnen.
Damit es im Verhaeltnis bleibt.
Beispiel:
Das Originalbild ist 444 px hoch und 390 px breit.
Wenn ich das einfach auf 200x100 stauche, dann schaut das geschissen aus...
Desshalb soll Perl berechen, welche Höhe/Breite die Grösste ist,
die aber KLEINER ist als 200x100
Originalbild-Breite/Höhe müssen zueinander aber noch im Verhaeltnis bleiben!
Das mit dem Verhaeltnis kann ich schwer erklaeren.
Beispiel:
Ein Bild ist 400px hoch und 100px breit
Die 100px passen ja schon,
sind also nur mehr die 500px zu veraendern.
Das waere dann auf 200 zurücksetzen.
Dann waeren es 200x100
Und genau DAS will ich verhindern!!!
Im richtigen Verhaeltnis waere das dann eine höhe von 200px,
aber eine Breite von nur mehr 50px !!!!!
Klar warum?
Das Verhaeltnis!
Wie mache ich das in Perl?
Und ausserdem soll gecheckt werden ob das Bild grösser als 200 KB ist
Wenn ja nicht verarbeiten.
Danke!
Aqua
Hi,
nun der Hacken *gg*
Haken.
Aber: auch nicht einfach nur scalieren,
sondern Berechnen.
Ja, tu Dir keinen Zwang an. Perl hat keine Probleme mit Division und Multiplikation. Btw: "to scale" heißt auf deutsch "skalieren", nicht "scalieren".
Desshalb soll Perl berechen, welche Höhe/Breite die Grösste ist,
die aber KLEINER ist als 200x100
Perl berechnet genau das, was Du ihm sagst. Ermittle also zunächst einen Algorithmus; setze ihn erst später in einen Programmcode um.
Ein Bild ist 400px hoch und 100px breit
Die 100px passen ja schon,
sind also nur mehr die 500px zu veraendern.
Nein, sind sie nicht. Du stellst fest, dass das Bild zu skalieren ist, und skalierst das Bild, nicht die Höhe.
Wie mache ich das in Perl?
Genau wie in jeder anderen Sprache: mit dem richtigen Algorithmus.
Und ausserdem soll gecheckt werden ob das Bild grösser als 200 KB ist
Wenn ja nicht verarbeiten.
perldoc -f -X
perldoc -f length
Cheatah
Hi,
Zusätzlich zu dem was Cheatah gesagt hat, noch etwas.
Wie mache ich das in Perl?
Um die Bildgröße zu bekommen, würde ich mir mal Image::Size aus dem Cpan holen, und anschauen.
Grüße Andres Freund
Hallo,
Also das Skalieren eines Bildes an sich sollte nicht das Problem sein, wenn man das PAssende Modul (siehe Image::Size z.B.) und das Bild hat. Auch die Größe des Bildes an sich zu ermitteln ist nicht wirklich problematisch.
Ich frage mich nur, wie Du das sinnvollerweise anstellen willst, wenn das Bild nicht in Deiner Obhut ist.
Die Anpassungen einmalig vorzunehmen greifen, so denke ich, nicht, da der Anwender das Bild ja nach dem Eintragen in Deinen Datenbasis jederzeit ändern kann, wodurch all die Mühe umsonst ist.
Und das Bild jedesmal beim Anzeigen der Seite überprüfen ist imho auch nicht das Wahre, da Du dann nur zusätzlichen Traffic erzeugst. Du mußt ja das Bild zuerst vom Originalserver auf Deinen Server laden um es zu analysieren.
Grüße
Klaus