2017-07-28 12 views
-1

Ich habe viele Quellen über LZW-Komprimierung überprüft, aber es hat nicht mit Image-Datei funktioniert.Java LZW komprimiert und dekomprimiert mit Bild

Hier sind die Ressourcen, was ich bisher geprüft haben:

https://www.codemiles.com/java/lzw-data-compression-decompression-algorithm-java-code-t99.html

Dieses die Kompresse Datei ist größer als Originaldatei

https://codereview.stackexchange.com/questions/122080/simplifying-lzw-compression-decompression

Könnten Sie bitte eine Ressource geben, Arbeit mit Bildkompression? Danke !!!

+1

Welche Art von Bild? GIFs sind bereits mit LZW komprimiert. Tatsächlich sind die meisten Bildformate komprimiert. Was für Bilder sind das? Und welche Komprimierung ist akzeptabel? Schließlich, fragen Sie nicht nach Offsite-Ressourcen (das ist Off-Topic). –

+0

Ich habe versucht, JPEG-Datei zu komprimieren, aber die komprimierte Datei scheint größer als die ursprüngliche Datei zu sein. –

+1

Korrekt. JPEG ist bereits komprimiert. Das Komprimieren einer komprimierten Datei führt in der Regel zu einer größeren Datei. –

Antwort

0

Das Komprimieren eines bereits komprimierten Bildes ist keine gute Idee, da die erste Komprimierung alle statistischen Hinweise entfernt, die der zweite Komprimierer verwenden kann. Das gilt zumindest für moderne Komprimierungsalgorithmen, wie sie in den Bildformaten JPEG, PNG, GIF, TIFF und WebP verwendet werden. Eine komprimierte Datei, die in einem Hex-Editor angezeigt wird, ähnelt normalerweise einem Stream zufälliger Bytes, und zufällige Daten (oder nicht zufällige Daten mit statistischen Eigenschaften, die zufälligen Daten ähneln) können nicht komprimiert werden. Normalerweise ist das Ergebnis aufgrund des Overheads im Speicherformat sogar größer als das Original. Kluge Kompressoren erkennen diesen Zustand und kehren einfach zu den Originaldaten zurück, anstatt sie zu komprimieren.

Wenn Sie also denken, dass Ihr Bild möglicherweise weiter komprimiert wird, müssen Sie es zuerst dekomprimieren. Dann können Sie einen anderen Kompressor ausprobieren, der bessere Ergebnisse liefert. Ich bezweifle jedoch, dass jede LZW-Variante Ihnen gegenüber JPEG einen erheblichen Gewinn bringen wird. Während es eine wirklich clevere Erweiterung der Lempel-Ziv-Familie von Komprimierungsalgorithmen ist, ist LZW eine rein verlustfreie Technik und hat daher eine angeborene Beschränkung der erreichbaren Komprimierungsrate, die in der statistischen Verteilung der Bilddaten begründet ist. JPEG und andere verlustbehaftete Bildformate tauschen die Bildqualität für die Größe aus und können daher verlustfreie Techniken leicht übertreffen.

Beachten Sie, dass das GIF-Format ein Sonderfall ist. Bei der verlustfreien LZW-Komprimierung ist eine Farbpalette von bis zu 256 Einträgen erforderlich. Um ein buntes Bild wie ein Foto als GIF zu kodieren, müssen Sie zuerst den Farbraum quantisieren, um eine 256-Farben-Palette zu erhalten. Dies ist wieder eine verlustbehaftete Technik, die sich jedoch stark von den Algorithmen unterscheidet, die von JPEG und WebP mit Verlust verwendet werden. Quantisierte GIF-Bilder von Fotos werden aufgrund der Reduzierung der RGB-Informationen im Bild ausgezeichnet komprimiert, zeigen jedoch deutliche Verschlechterungen von Farbverläufen, wie sie in menschlichen Gesichtern, Blumenblättern und einem bewölkten Himmel zu finden sind.

Als Nebenbemerkung: Wenn GIF größere Farbpaletten (z. B. 1024) zulassen würde, könnte es ein echtes Killerformat für fotografische Bilder werden. Vielleicht ist es Zeit für ein GIF17a Format Update ?!

Verwandte Themen