2010-02-12 4 views
8

Ich versuche, eine Pinselanwendung durch processingjs zu entwickeln. Diese API hat die Funktion loadPixels(), mit der die RGB-Werte in das Array geladen werden. Jetzt möchte ich das Array in der Server-Datenbank speichern.Javascript Client-Datenkomprimierung

Das Problem ist die Größe des Arrays, wenn ich in eine Zeichenfolge konvertieren, ist die Größe 5 MB.

Ist die beste Lösung Kompression auf Javascript-Ebene zu tun? Wie es geht?

Antwort

8

Ein Beispiel für eine LZW-Komprimierung finden Sie unter http://rosettacode.org/wiki/LZW_compression#JavaScript. Es funktioniert am besten bei längeren Saiten mit wiederholten Mustern.

Vom Wikipedia article auf LZW:

Ein Wörterbuch initialisiert die Einzelzeichenketten entsprechend allen möglichen Eingabezeichen (und nichts anderes außer dem klaren und Codes stoppen zu enthalten, wenn sie werden benutzt). Der Algorithmus arbeitet durch Scannen der Eingabe Zeichenfolge für nacheinander längere Teilstrings, bis es eine findet, die nicht im Wörterbuch ist. Wenn eine solche Zeichenfolge gefunden wird, der Index für die String kleiner dem letzten Zeichen (dh die längste Teilkette, die in der Wörterbuch ist) wird aus dem Wörterbuch abgerufen und zur Ausgabe gesendet, und der neue Zeichenfolge (einschließlich Das letzte Zeichen) wird dem Wörterbuch mit dem nächsten verfügbaren Code hinzugefügt. Das letzte Eingabezeichen wird dann als nächster Startpunkt verwendet, um nach Teilstrings zu suchen.

Auf diese Weise sukzessive mehr Strings werden im Wörterbuch registriert und für nachfolgende Codierung als einzelne Ausgabe Werte zur Verfügung gestellt. Der Algorithmus funktioniert am besten unter Daten mit wiederholten Mustern, so dass die ersten Teile einer Nachricht wenig Kompression sehen. Wenn die Nachricht anwächst, tendiert das Komprimierungsverhältnis asymptotisch zu dem Maximum.

+1

In meinem Fall reduziert dies auf 33% der tatsächlichen Größe – Soft

+0

@Soft, das ist ziemlich cool! Froh, dass es geholfen hat. –

+1

Diese Implementierung funktioniert in bestimmten Fällen nicht. Ich kodierte einen großen Teil von HTML und es wurde nicht richtig dekodiert. Keep Rückkehr Null. Verwenden Sie stattdessen diese Implementierung: https://gist.github.com/revolunet/843889 – shrimpwagon

Verwandte Themen