Ähnliche Bilder verlustfrei komprimieren?

Ähnliche Bilder verlustfrei komprimieren?

Ich muss die Größe meiner Fotobibliothek reduzieren, also möchte ich sie natürlich komprimieren. Viele von ihnen sind nicht ganz identisch, aber dennoch sehr ähnlich (aufeinanderfolgende Aufnahmen derselben Szene). Gibt es einen Komprimierungsalgorithmus, der diese Tatsache ausnutzt, um diese Bilder effektiv zu komprimieren? 7zip (LZMA) ist nutzlos.

Antwort1

Sie könnten versuchenPaket 8(fp8_v2.zip). Ich habe es gerade selbst an 1440 ähnlichen PNG-Bildern und dann noch einmal an 111 ähnlichen JPG-Bildern ausprobiert. Hier sind die Ergebnisse.

  • 1440 PNG-Dateien, 28.631.615 Bytes => 2.058.653 Bytes komprimiert
  • 111 JPG-Dateien, 15.003.820 Bytes => 489.096 Bytes komprimiert

Die Komprimierung der PNG-Dateien dauerte etwa 8 Minuten und beanspruchte 550 MB Speicher bei Verwendung von:

fp8_v2.exe -7 images *.png

Die Komprimierung der JPG-Dateien dauerte etwa 5 Minuten und benötigte 125 MB Speicher bei Verwendung von:

fp8_v2.exe -5 images image12*.jpg

Siehe auch:JPG-Test zur verlustfreien Bildkomprimierung

Antwort2

Hier ist eine einfache Lösung, die bei Fotos nicht funktioniert, aber funktionieren kann, wenn man mehrere Bilder mit großen, pixelweise identischen Bereichen hat: Speichern Sie die Bilder in einem entpackten Format wie BMP (nicht PNG oder GIF), tarnen Sie sie und komprimieren Sie sie mit einem anständigen Kompressor wie XZ, z. B. unter Linux mit etwas wie

tar -c myDirectory | xz -9 >myDirectory.tar.xz

Anstelle von TAR und XZ kann man auch 7-Zip mit der Option „solid archive“ verwenden, um ungefähr die gleiche Leistung zu erzielen. Auf diese Weise konnte ich 16 ähnliche Screenshots, die als separate PNG-Dateien jeweils etwa 900 KB groß waren, in ein 2 MB großes Archiv komprimieren. Der Vorteil dieser Lösung besteht darin, dass sie gängige Dateiformate verwendet und daher ohne Installation neuer Software funktioniert. (Leider haben die älteren und noch gängigeren Programme GZIP und BZIP2 bei mir keine gute Arbeit geleistet – möglicherweise, weil die Blockgröße von BZIP2 nicht größer als 900 KB konfiguriert werden kann.)

Antwort3

Ich könnte mir vorstellen, dass die Burrows-Wheeler-Transformation mit einem arithmetischen Codierer bei einem ausreichend großen Fenster hierfür ideal wäre. Was passiert, wenn Sie BZIP2 so konfigurieren, dass es eine Blockgröße verwendet, die einer kleinen Anzahl von Fotos entspricht? Es wird langsamer sein und mehr Speicher benötigen, aber die Komprimierungsrate sollte in die Höhe schnellen. Und haben Sie LZMA schon mit größeren Blockgrößen ausprobiert?

Antwort4

Nicht, dass ich das gesehen hätte. Das Nächstliegende wäre wahrscheinlich, mehrere ähnliche JPEGs zu nehmen und sie in einen MJPEG-Film einzufügen. Sie könnten für einen ähnlichen Zweck auch APNG oder animierte GIFs verwenden.

Ich bin mir jedoch nicht sicher, wie gut das funktionieren würde, und es hört sich so an, als würden Sie bereits über Film-Screenshots sprechen. Sie also erneut in eine Filmdatei zu packen, klingt … kontraproduktiv.

Wenn Sie noch über die Clips verfügen, aus denen die Bildschirme stammen, wäre es vielleicht besser, einfach ein Befehlszeilentool zu finden, mit dem Sie das genaue Bild extrahieren können. Kopieren Sie diese eindeutige Kennung irgendwo in eine Textdatei. Anschließend können Sie das Bild bei Bedarf jederzeit problemlos erneut extrahieren.

verwandte Informationen