Dropbox ha recentemente rilasciato Lepton ( GitHub ), un metodo che comprime senza perdita di immagini JPEG andata e ritorno, con un risparmio medio del 22%.
A causa del principio pigeonhole , non è possibile garantire che nessun algoritmo di compressione generale dia luogo a un file più piccolo ( generale perché non si applica agli input vincolati a un formato specifico). Lepton sfrutta le caratteristiche comuni dei JPEG che, se sovvertiti, potrebbero rovinarlo per produrre un file più grande della fonte.
Requisiti
Scrivi un programma che genera:
- Un'immagine JPEG / JFIF valida,
- con una dimensione compresa tra 0,5 MB e 1 MB,
- non inferiore a 256 × 256 px,
- non più grande di 4096 × 4096 px,
- riconoscibile da Lepton (può "comprimere" con successo
.lep
un'immagine), e - si decomprime in un identico
.jpg
(come input). APPx
,COM
e altri metadati, le sezioni dei marker non grafici sono limitate nel JPEG (l'iniezione di quantità arbitrarie di byte casuali nell'immagine per avvicinarsi asintoticamente alla compressione 1: 1 è scadente.)- è consentito un
APP0
marker JFIF ma non è consentita alcuna anteprima (dovrebbe essere esattamente di 16 byte) - tl; dr Se non stai spingendo intenzionalmente i metadati in un segmento EXIF e disabiliti qualsiasi tipo di anteprima che la tua libreria di lingue di tua scelta vuole mettere nell'immagine, dovrebbe essere OK.
- è consentito un
Pubblica il codice e l'immagine.
Se vuoi scrivere un programma che produce un'immagine Lepton che quando convertita produce un JPEG che soddisfa i criteri, va bene. Deve rimanere identico attraverso arbitrariamente molti cicli JPEG → Lepton → JPEG → ....
punteggio
La dimensione in byte dell'immagine Lepton divisa per l'immagine JPEG di origine. Più alto (peggiore compressione di Lepton) è meglio. Esegui Lepton con flag e switch predefiniti.
Ottenere Lepton
Un corso accelerato di 5 secondi per costruire Lepton:
git clone https://github.com/dropbox/lepton.git
cd lepton
./autogen.sh && ./configure && make
# fish shell: ./autogen.sh ;and ./configure ;and make
Quindi ./lepton --help
dovrebbe dirti delle cose.