Dropbox niedawno wydał Lepton ( GitHub ), metodę, która bezstratnie kompresuje obrazy JPEG w obie strony, oszczędzając średnio 22%.
Z powodu zasady szufladki nie można zagwarantować , że dowolny ogólny algorytm kompresji spowoduje powstanie mniejszego pliku ( ogólnie, ponieważ nie ma zastosowania do danych wejściowych ograniczonych do określonego formatu). Lepton wykorzystuje typowe cechy plików JPEG, które, jeśli zostaną przewrócone, mogą zaszufladkować go, aby utworzyć plik większy niż źródło.
Wymagania
Napisz program, który generuje:
- Prawidłowy obraz JPEG / JFIF,
- o wielkości od 0,5 MB do 1 MB,
- nie mniejszy niż 256 × 256 px,
- nie większy niż 4096 × 4096 px,
- rozpoznawalny przez Leptona (może z powodzeniem „kompresować” się do
.lep
obrazu), oraz - dekompresuje na identyczne
.jpg
(jako wejście). APPx
,COM
i inne metadane, niegeograficzne sekcje znaczników są ograniczone w formacie JPEG (wstrzykiwanie dowolnych ilości losowych bajtów do obrazu w celu asymptotycznego podejścia do kompresji 1: 1 jest kiepskie).APP0
JFIF znacznik jest dozwolone, ale nie wolno miniatur (powinien być dokładnie 16 bajtów)- tl; dr Jeśli celowo nie umieszczasz metadanych w segmencie EXIF i wyłączasz dowolną miniaturę, którą chcesz wstawić do biblioteki, którą chcesz wybrać, powinno to być w porządku.
Opublikuj kod i obraz.
Jeśli chcesz napisać program, który produkuje obraz Lepton, który po konwersji daje JPEG spełniający kryteria, to w porządku. Musi pozostać identyczny w dowolnie wielu cyklach JPEG → Lepton → JPEG → ...
Punktacja
Rozmiar bajtu obrazu Lepton podzielony przez źródłowy obraz JPEG. Im wyższa (gorsza kompresja Leptona), tym lepiej. Uruchom Lepton z domyślnymi flagami i przełącznikami.
Coraz Lepton
5-sekundowy kurs do zbudowania Leptona:
git clone https://github.com/dropbox/lepton.git
cd lepton
./autogen.sh && ./configure && make
# fish shell: ./autogen.sh ;and ./configure ;and make
Więc ./lepton --help
powinienem ci powiedzieć.