Dropbox hat kürzlich Lepton ( GitHub ) veröffentlicht, eine Methode, die JPEG-Bilder verlustfrei komprimiert und dabei durchschnittlich 22% einspart.
Aufgrund des Pigeonhole-Prinzips kann nicht garantiert werden , dass ein allgemeiner Komprimierungsalgorithmus zu einer kleineren Datei führt ( allgemein, da er nicht für Eingaben gilt, die auf ein bestimmtes Format beschränkt sind). Lepton nutzt die allgemeinen Eigenschaften von JPEGs aus, die, wenn sie unterwandert werden, in eine Schublade gesteckt werden können, um eine Datei zu erstellen, die größer als die Quelle ist.
Bedarf
Schreiben Sie ein Programm, das Folgendes generiert:
- Ein gültiges JPEG / JFIF-Bild,
- mit einer Größe zwischen 0,5 MB und 1 MB,
- nicht kleiner als 256 × 256 px,
- nicht größer als 4096 × 4096 px,
- erkennbar an Lepton (es kann erfolgreich zu einem
.lep
Bild "komprimiert" werden) und - dekomprimiert auf eine identische
.jpg
(als Eingabe). APPx
,COM
Und andere Metadaten, nicht-grafische Markierungsabschnitte sind in den JPEG (Injizieren beliebigen Mengen von Zufallsbytes in das Bild asymptotisch nähern . 1: 1 - Komprimierung lahm) eingeschränkt- Ein
APP0
JFIF-Marker ist zulässig, aber keine Miniaturansicht (sollte genau 16 Byte groß sein). - tl; dr Wenn Sie Metadaten nicht absichtlich in ein EXIF-Segment verschieben und eine beliebige Art von Miniaturbild deaktivieren, das Ihre Sprachbibliothek in das Bild einfügen möchte, sollte dies in Ordnung sein.
- Ein
Posten Sie den Code und das Bild.
Wenn Sie ein Programm schreiben möchten, das ein Lepton- Bild erzeugt, das bei der Konvertierung ein JPEG ergibt, das die Kriterien erfüllt, ist das in Ordnung. Es muss über beliebig viele JPEG → Lepton → JPEG → ... Zyklen hinweg identisch bleiben.
Wertung
Die Bytegröße des Lepton-Bildes geteilt durch das JPEG-Quellbild. Höhere (schlechtere Lepton-Komprimierung) ist besser. Führen Sie Lepton mit Standardflags und -schaltern aus.
Lepton bekommen
Ein 5-Sekunden-Crashkurs zum Bau von Lepton:
git clone https://github.com/dropbox/lepton.git
cd lepton
./autogen.sh && ./configure && make
# fish shell: ./autogen.sh ;and ./configure ;and make
Dann ./lepton --help
sollten Sie Dinge erzählen.