Autor Beitrag
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19274
Erhaltene Danke: 1740

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Fr 01.06.07 01:12 
Hallo!

Ich biete auf einem Webspace einen Image-Upload an. Bisher werden die Bilder serverseitig mit PHP auf Vorschaugröße gebracht und dieses kleine Bild zusätzlich gespeichert.
Das Problem ist jedoch, dass der Server dabei stark belastet wird. (Es laufen parallel ja viele Prozesse.)

Aus diesem Grund lagere ich so viele Sachen wie möglich auf den jeweiligen Client aus, so dass "nur" Traffic entsteht, die Berechnungen aber nicht auf dem Server passieren.

Jetzt ist die Frage: Wie kann ich nur mit JavaScript (ohne Java, ActiveX o.ä.) ein JPEG in der Größe verändern?

Mein Ansatz sieht so aus:
1. Der Benutzer bekommt ein ganz normales Upload-Formular
2. Die Datei wird hochgeladen
3. Es wird eine Warteseite beim User angezeigt, wobei im onLoad-Event des body-Tags dann folgendes passiert:
3.1 Es wird ein Image-Objekt erzeugt und das vorher hochgeladene Bild hineingeladen
3.2 Jetzt müsste dieses Image-Objekt in der Größe verändert werden
3.3 Das verkleinerte Bild wird gespeichert und hochgeladen
3.4 Die Erfolgsseite wird geladen

Ich denke das könnte so funktionieren, es fehlt mir jedoch die Möglichkeit, das Bild in der Größe zu verändern. Ich nehme an, dass es da irgendwelche Frameworks gibt, und ich habe auch ein paar Sachen gesehen, die so aussahen als ob es das wäre, aber irgendwie war da nix dabei, was ich direkt hätte benutzen können (oder ich habe nicht erkannt wie...).

Kann mir da jemand Tipps geben, womit das geht oder was ich da benutzen könnte?

Vielen Dank schonmal,
Schönen Gruß,
Sebastian Jänicke
Danniolo
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 693



BeitragVerfasst: Di 05.06.07 23:00 
Ich denke, vor allem weil JS keine Dateisystemfunktionalitäten besitzt, wird das nicht möglich sein.
Dein Server muss wohl oder übel mit der Last zurechtkommen.
Diskette
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 21

Win XP
Delphi 5 Pers., Borland Developer 2006 Prof.
BeitragVerfasst: Mo 11.06.07 20:04 
Wieso machst du´s nicht einfach beim einbinden kleiner?
Also mit: <img src="bild.jpg" width="200" height="200">
Marco D.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 2750

Windows Vista
Delphi 7, Delphi 2005 PE, PHP 4 + 5 (Notepad++), Java (Eclipse), XML, XML Schema, ABAP, ABAP OO
BeitragVerfasst: Mo 11.06.07 20:10 
user profile iconDiskette hat folgendes geschrieben:
Wieso machst du´s nicht einfach beim einbinden kleiner?
Also mit: <img src="bild.jpg" width="200" height="200">

Es geht darum, die Datei selber kleiner zu machen und nicht nur die Anzeige.

_________________
Pascal keeps your hand tied. C gives you enough rope to hang yourself. C++ gives you enough rope to shoot yourself in the foot
Diskette
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 21

Win XP
Delphi 5 Pers., Borland Developer 2006 Prof.
BeitragVerfasst: Mi 13.06.07 22:03 
Okay, sry habs falsch verstanden...
Guck dir das ma an, hab das nur schnell rausgesucht,
aber net ganz gelesen ;)
www.selfphp.info/pra...ite=269&group=40

vlt is da die lösung ja drinne ;)
LG,
Diskette



Moderiert von user profile iconChristian S.: URL korrigiert
Danniolo
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 693



BeitragVerfasst: Mi 13.06.07 22:15 
Tja, mit PHP geht das ganz einfach das ist klar. Allerdings ist es ja das Problem des user profile iconjaenicke, dass ihm dieses serverseitige Verkleinern mit PHP zu rechenintensiv ist und er nach einer Möglichkeit sucht, das clientseitig ausführen zu lassen.
Wie gesagt glaube ich aber nach wie vor, dass dies (zumindest mit JavaScript) unmöglich ist.
Agawain
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 460

win xp
D5, MySQL, devxpress
BeitragVerfasst: Mi 13.06.07 22:30 
Ich liebe google 8)

www.webmaster-resour...oder-verkleinern.php

Gruß Aga

PS, sogar weniger Traffic, da die Thumbs nicht auf dem Server gespeichert werden müssen

Das PS nehm ich wieder zurück, denn das ist eine Methode, die doch nur die Anzeigegröße verändert.
Was also letztendlich sogar mehr Traffic erzeugt, denn die Dateigröße, also die physische bleibt erhalten...mal wieder zu kurz gedacht...obwohl ansich nicht dagegen, daß JS eine Datei schrumpfen läßt, solange JS nicht auf der clientseitigen HD speichert.
Aber geht halt nicht, was aber gehen müßte, wäre ein applet, das darf zwar auch nicht alles, aber ansich steht der volle Sprachumfang von Java zur Verfügung.
Also könnte das gehen.
Ansonsten hilft nur serverseitiges verkleiner, oder, wenn auch eine wenig elegante Methode...

Die Bilder erst am nächsten Tag frei zu schalten, bzw. zur Verfügung zu stellen und die ganze Bildverkleinerungsprezedur an einen cron-job zu hängen, der Nachts läuft.
Danniolo
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 693



BeitragVerfasst: Do 14.06.07 14:58 
user profile iconAgawain hat folgendes geschrieben:
Ansonsten hilft nur serverseitiges verkleiner, oder, wenn auch eine wenig elegante Methode...

Die Bilder erst am nächsten Tag frei zu schalten, bzw. zur Verfügung zu stellen und die ganze Bildverkleinerungsprezedur an einen cron-job zu hängen, der Nachts läuft.


Also das ist das eleganteste was es gibt. Alles andere ist nicht wirklich elegant (z.b. Java-Applet o.ä.).
Agawain
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 460

win xp
D5, MySQL, devxpress
BeitragVerfasst: Do 14.06.07 19:58 
Irgendwie haste da recht, hatte nur an den Kunden gedacht, der ungeduldig einen Tag warten muß.

Demgegenüber steht, daß viele Kunden kein Java druf haben, oder sich auch weigern könnten, ein applet runterzuladen, bzw. Java deaktiviert haben.

Außerdem läuft Java ja in einer geschlossenen Box, da es schwierig sein dürfte, den Browser zu überreden, das Bild auszuliefern, müßte man das Bild hochladen und das Apllet müßt es dann wieder runterladen...etwas sehr nach von hinten durch die Brut ins Auge :wink:

Gruß

Aga

Mir ist da gerade noch was eingefallen, man könnte ja beide Methoden miteinander kombinieren.

Also Bilder sofort zur Verfügung stellen, wenns nicht mit dem Traffic kritisch wird.
Javascript sorgt dafür, daß, wenn thumb nicht vom Server geliefert werden kann, das Ori verkleinert dargestellt wird.
Nachts läuft der Cron-Job und dann ist das erledigt.
blackbirdXXX

ontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 1077
Erhaltene Danke: 1

Ubuntu Dapper

BeitragVerfasst: So 17.06.07 02:12 
Klar kannst du das. Du musst dir nur den Algorithmus in JavaScript implementieren. Aber da JavaScript keine Arrays oder Integer hat wird das ein eher laaaaaaaaaaaaaaaaaaaaangsames Verfahren.

_________________
Klein, schwarz und ärgert Techniker? Jumper!
Ghostwalker
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 17

Windows XP Prof.
Turbo Delphi 2006, Delphi 7 Prof.
BeitragVerfasst: So 17.06.07 09:00 
Vielleicht helfen dir die zwei Links weiter:

prototype-Javascript-Bibleothek

sowie

Erweiterungen auf basis obiger Bibleothek

Die treiben da Sachen....wirklich interresant :shock:

_________________
Gruß Ghostwalker
Es gibt keine Probleme, nur noch nicht gefundenen Lösungen
blackbirdXXX

ontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 1077
Erhaltene Danke: 1

Ubuntu Dapper

BeitragVerfasst: So 17.06.07 10:18 
user profile iconGhostwalker hat folgendes geschrieben:
Die treiben da Sachen....wirklich interresant :shock:

Wird ihm aber nicht helfen, weil beide nix mit Grafiken tun. Hättest du ihm dojo gegeben hätte ihm das mehr gebracht.

_________________
Klein, schwarz und ärgert Techniker? Jumper!
blackbirdXXX

ontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 1077
Erhaltene Danke: 1

Ubuntu Dapper

BeitragVerfasst: So 17.06.07 10:59 
Gut, also mit Canvas hab ichs hinbekommen: lucumr.pocoo.org/cog...-image-thumbnailing/

Für bessere Qualität müsstest du den Algorithmus selber basteln, die scale() Funktion ist zumindest in Firefox etwas bescheiden.

_________________
Klein, schwarz und ärgert Techniker? Jumper!
Danniolo
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 693



BeitragVerfasst: So 17.06.07 12:01 
Oh, hätt ich nicht gedacht, dass das wirklich möglich ist.
Naja - man lernt nie aus^^
blackbirdXXX

ontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 1077
Erhaltene Danke: 1

Ubuntu Dapper

BeitragVerfasst: So 17.06.07 12:36 
user profile iconDanniolo hat folgendes geschrieben:
Oh, hätt ich nicht gedacht, dass das wirklich möglich ist.
Naja - man lernt nie aus^^


Sehr witzig. Eine Integer/Array lose Sprache ist trotzdem Turing-komplett. Warum sollte soetwas also nicht möglich sein?

_________________
Klein, schwarz und ärgert Techniker? Jumper!
Danniolo
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 693



BeitragVerfasst: So 17.06.07 12:42 
Ich habe es mir einfach nich denken können bzw. die Durchführbarkeit / usability bezweifelt.. Was ist daran so unverständlich?!
jaenicke Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19274
Erhaltene Danke: 1740

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 30.06.07 18:06 
Vielen Dank!

Mit dem Code geht es (wenn auch leider ja nicht in allen Browsern).
Nach langem Herumprobieren habe ich jetzt eine Lösung gefunden, bei der möglichst viel (je nachdem was der Browser unterstützt) an den Client ausgelagert wird. Insgesamt konnte ich die durchschnittliche Serverlast bei ungefähr gleichbleibender Besucherzahl um ca. 80% reduzieren, so dass ich da jetzt keine Probleme mehr habe.

Also nochmal vielen Dank!

Schönen Gruß,
Sebastian