La libreria MozJPEG utilizza un algoritmo ispirato a jpegcrush
(scansione progressiva ottimizzata), ma tecnicamente è un'implementazione completamente nuova.
La libreria MozJPEG è una sostituzione drop-in per il popolare libjpeg, quindi quasi tutti gli strumenti relativi a JPEG possono essere compilati in versioni "regolari" e "MozJPEG".
Esiste uno "regolare" jpegtran
e una versione MozJPEG di jpegtran
. È lo stesso programma, ma la versione di MozJPEG ha impostazioni predefinite diverse e svolge un lavoro extra per comprimere meglio.
Analogamente, jpegoptim
viene in genere creato con libjpeg di riserva, ma è anche possibile crearlo con la versione di libjpeg di MozJPEG (ad esempio, ImageOptim).
Ci sono due modi per utilizzare MozJPEG:
- lossless (prendere un file JPEG esistente e renderlo un po 'più piccolo). Questo è quello che fa Mozillade
jpegtran
di MozJPEG.
- lossy (crea un nuovo file JPEG da pixel non compressi, con rapporto qualità/file maggiore). Questo è quello che fa Mozillade
cjpeg
di MozJPEG e altri strumenti come jpegoptim
possono essere fatti con MozJPEG.
Entrambe le modalità di funzionamento sono più lente di libjpeg vaniglia non ottimizzante. L'ottimizzazione senza perdite fa meno lavoro, ma raggiunge anche un guadagno minore.
più precisa analisi di velocità è qui: https://libjpeg-turbo.org/About/Mozjpeg
nota che "lento" qui è relativo. In termini assoluti, comprime diversi megapixel al secondo, quindi potrebbe essere abbastanza veloce per la maggior parte delle applicazioni.
Come potete leggere dalla [descrizione JPGCrush] (http://u88.n24.queensu.ca/exiftool/forum/index.php?topic=3610.0) e da [quell'articolo] (https: // techcrunch. com/2014/03/05/mozillas-new-jpeg-encoder-promises-up-to-10-reduction-in-file-sizes /), JPGCrush è un wrapper Perl attorno a 'jpegtran' che esercita diverse opzioni di compressione JPEG (elencato in 'jpeg_scan_rgb.txt' - ogni riga è una struttura [' jpeg_scan_info'] (https://github.com/cloudflare/jpegtran/blob/570e8e87c8c618ff028e60eb84eaa816a3fe6b40/jpeglib.h#L198) e sceglie l'output più piccolo. E 'mozjpeg' segue lo stesso algoritmo. –
Trova la risposta alla tua domanda [qui] (https://news.ycombinator.com/item?id=8142893#up_8143648): _jpegcrush/jpegrescan trick: modifica i dettagli del JPEG progressivo per la massima compressione (ogni scansione ottiene il suo possedere la tabella di Huffman e JPEG può dividere arbitrariamente i dati nelle scansioni) _. Trovato anche [descrizione del file di scansione] (https://github.com/mozilla/mozjpeg/blob/v3.1/wizard.txt # L113). –