Dropbox a récemment publié Lepton ( GitHub ), une méthode qui compresse sans perte les images JPEG aller-retour, économisant en moyenne 22%.
En raison du principe du pigeonhole , aucun algorithme de compression général ne peut garantir un fichier plus petit ( général car il ne s'applique pas aux entrées limitées à un format spécifique). Lepton exploite les caractéristiques communes des JPEG, qui, si elles étaient subverties, pourraient le classer pour produire un fichier plus grand que la source.
Exigences
Écrivez un programme qui génère:
- Une image JPEG / JFIF valide,
- d'une taille comprise entre 0,5 Mo et 1 Mo,
- pas plus petit que 256 × 256 px,
- pas plus grand que 4096 × 4096 px,
- reconnaissable par Lepton (il peut "compresser" avec succès une
.lep
image), et - décompresse à un identique
.jpg
(comme l'entrée). APPx
,COM
et d'autres métadonnées, les sections de marqueur non graphique sont limitées dans le JPEG (l'injection de quantités arbitraires d'octets aléatoires dans l'image pour approcher asymptotiquement la compression 1: 1 est boiteuse.)- un
APP0
marqueur JFIF est autorisé mais aucune vignette n'est autorisée (devrait être exactement 16 octets) - tl; dr Si vous ne placez pas intentionnellement des métadonnées dans un segment EXIF et que vous désactivez toute sorte de miniature que votre bibliothèque de langues de choix souhaite mettre dans l'image, cela devrait être OK.
- un
Postez le code et l'image.
Si vous voulez écrire un programme qui produit une image Lepton qui, une fois convertie, produit un JPEG répondant aux critères, c'est très bien. Elle doit rester identique sur plusieurs cycles JPEG → Lepton → JPEG → ... arbitrairement.
Notation
La taille en octets de l'image Lepton divisée par l'image JPEG source. Une valeur plus élevée (pire compression Lepton) est meilleure. Exécutez Lepton avec des indicateurs et des commutateurs par défaut.
Obtenir Lepton
Un cours intensif de 5 secondes pour construire Lepton:
git clone https://github.com/dropbox/lepton.git
cd lepton
./autogen.sh && ./configure && make
# fish shell: ./autogen.sh ;and ./configure ;and make
Alors ./lepton --help
devrait vous dire des choses.