2010-02-12 9 views
8

Estoy tratando de desarrollar una aplicación de pincel a través del procesamiento de archivos. Esta API tiene la función loadPixels() que cargará los valores RGB en la matriz. Ahora quiero almacenar la matriz en el servidor db.Compresión de datos cliente de Javascript

El problema es el tamaño de la matriz, cuando convierto en una cadena el tamaño es de 5 MB.

¿La mejor solución es hacer compresión a nivel de JavaScript? ¿Cómo hacerlo?

Respuesta

8

Consulte http://rosettacode.org/wiki/LZW_compression#JavaScript para obtener un ejemplo de compresión LZW. Funciona mejor en cadenas más largas con patrones repetidos.

Desde el Wikipedia article en LZW:

Un diccionario se inicializa para contener las cuerdas de un solo carácter correspondiente a todos los posibles caracteres de entrada (y nada más excepto la clara y dejar de códigos si están siendo utilizados). El algoritmo funciona escaneando a través de la cadena de entrada para subcadenas sucesivamente más largas hasta que encuentra una que no está en el diccionario . Cuando se encuentra una cadena de tales , el índice de la cadena menos el último carácter (es decir, la subcadena más larga que se encuentra en el diccionario ) se recupera del diccionario y se envía a la salida, y la nueva cadena (incluyendo el último carácter ) se agrega al diccionario con el siguiente código disponible. El último carácter de entrada se utiliza como el siguiente punto de inicio para escanear las subcadenas .

De esta manera, sucesivamente ya cuerdas están registrados en el diccionario y puestos a disposición para codificación subsiguiente como salida única valores. El algoritmo funciona mejor en datos con patrones repetidos, por lo que las partes iniciales de un mensaje verán poca compresión. Como el mensaje crece, sin embargo, la relación de compresión tiende asintóticamente al máximo.

+1

En mi caso esto se redujo al 33% del tamaño real – Soft

+0

@Soft, ¡eso es genial! Me alegro de que haya ayudado. –

+1

Esta implementación no funciona en ciertas instancias. Estaba codificando una gran porción de HTML y no se estaba decodificando correctamente. Seguí regresando nulo. Use esta implementación en su lugar: https://gist.github.com/revolunet/843889 – shrimpwagon

Cuestiones relacionadas