Ich versuche eine Möglichkeit zu finden, die Größe von BASE64-kodierten Bildern zu reduzieren, die ich an den Server sende. Ich fand, dass question, wo LZMA Lösung vorgeschlagen wird. Wenn ich jedoch die Größe der Anfrage auf dem Server überprüfe, sehe ich, dass die Größe der unkomprimierten Version ~ 10 mal kleiner ist. Vermisse ich einen Schritt? Ich sehe, dass das Ergebnis der Komprimierung ist ein Byte Array
Ich habe versucht, .toString('utf8')
Methode zu verwenden, aber es scheint, dass es nur das Array beitreten.Warum die Größe einer durch LZMA-JS komprimierten Zeichenkette ist ca. 10x größer als vor der Komprimierung
/* LZMA COMPRESS/DECOMPRESS */
.factory('ooLZMA', ['CONFIG', function (CONFIG) {
return {
compress: function (string) {
return LZMA.compress(string, CONFIG.stringCompression);
},
decompress: function() {
return LZMA.decompress(string);
}
}
}])
Und auf dem Server:
console.log('size', req.headers['content-length']/1048576, 'comp', req.body.compressed);
//"compressed"
size 0.1276998519897461 comp true
//raw BASE64
size 0.01657390594482422 comp false
Es gibt zwei Probleme, die das Problem verursachen können. 1. Wenn Sie die akzeptierte Antwort auf die Frage lesen, die Sie erwähnten, können Sie sehen, dass die LZMA JS-Bibliothek ein signiertes Byte-Array erstellt und der Server einen nicht signierten verwendet. 2. Welches Format haben die Bilder, bevor Sie sie mit base64 kodieren? Viele Bildformate sind bereits komprimiert, so dass die base64-Kodierung und anschließende Komprimierung der resultierenden Zeichenfolge die Größe der Daten erhöhen wird. – Harry