libjpeg - libjpeg
Développeur(s) | Groupe JPEG indépendant Guido Vollbeding (mainteneur) |
---|---|
Première version | 7 octobre 1991 |
Version stable | 9j / 12 janvier 2020
|
Écrit en | C |
Système opérateur | Multiplateforme |
Taper | une bibliothèque |
Licence | Custom BSD- like ( logiciel gratuit ) |
Site Internet |
ijg |
libjpeg est une bibliothèque gratuite avec des fonctions pour gérer le format de données d'image JPEG . Il implémente un codec JPEG (encodage et décodage) ainsi que divers utilitaires pour gérer les données JPEG. Il est écrit en C et distribué en tant que logiciel libre ainsi que son code source sous les termes d'une coutume permissive ( BSD -comme) de licence de logiciel libre, qui exige l' attribution . La variante originale est maintenue et publiée par l'Independent JPEG Group (IJG). Pendant ce temps, il existe plusieurs fourches avec des fonctionnalités supplémentaires.
Les images JPEG JFIF sont largement utilisées sur le Web. La quantité de compression peut être ajustée pour obtenir le compromis souhaité entre la taille du fichier et la qualité visuelle.
Utilitaires
Les programmes utilitaires suivants sont fournis avec libjpeg :
- cjpeg et djpeg
- pour effectuer des conversions entre JPEG et d'autres formats de fichiers image populaires.
- rdjpgcom et wrjpgcom
- pour insérer et extraire des commentaires textuels dans des fichiers JPEG.
- jpegtran
- pour la transformation de fichiers JPEG existants.
jpegtran
Le programme de ligne de commande jpegtran fournit plusieurs fonctionnalités pour reformater et recoder la représentation des coefficients DCT , pour la transformation des données d'image réelles et pour éliminer les données auxiliaires dans les fichiers JPEG, respectivement. Les transformations concernant la représentation des coefficients comprennent :
- optimisation de la couche de codage Huffman d'un fichier JPEG pour augmenter la compression,
- conversion entre les formats JPEG progressifs et séquentiels,
- conversion entre Huffman et le codage arithmétique dans la couche de codage entropique .
Ces transformations sont chacune totalement sans perte et réversibles. Les transformations sur les données d'image comprennent :
- éliminer les données spécifiques à l'application non standard insérées par certains programmes d'image,
- effectuer certaines transformations sur un fichier, telles que :
- suppression des canaux de couleur (conversion en niveaux de gris),
- rotation et retournement par pas de 90 degrés,
- recadrage aux bordures des blocs d'images (tous les 8×8 ou 16×16 pixels),
- remise à l'échelle.
Celles-ci sont sans perte et réversibles uniquement en ce qui concerne les données d'image qui sont conservées. Le réencodage avec quantification avec perte répétée des données d'image ( perte de génération ) n'a pas lieu.
Il existe une application Windows associée, Jpegcrop , qui fournit une interface utilisateur à jpegtran . Pour les systèmes de type Unix comme Linux, il existe le CropGUI gratuit avec des fonctionnalités similaires. D'autres programmes prenant en charge les fonctions de transformation sans perte JPEG basées sur le code IJG sont indiqués dans la liste des applications sans perte .
Histoire
L'implémentation JPEG de l'Independent JPEG Group (IJG) a été rendue publique pour la première fois le 7 octobre 1991 et a été considérablement développée depuis lors. Le développement a d'abord été principalement réalisé par Tom Lane . L' implémentation open source de l'IJG était l'un des principaux packages open source et a été la clé du succès de la norme JPEG. De nombreuses entreprises l'ont incorporé dans une variété de produits tels que des éditeurs d'images et des navigateurs Web.
Pour la version 5, sortie le 24 septembre 1994, toute la base de code a été réécrite. Il a introduit les programmes utilitaires rdjpgcom et wrjpgcom pour gérer les commentaires de texte incorporés. La version 6 du 2 août 1995 est venue avec le support du JPEG progressif et pour la première fois avec le programme utilitaire jpegtran . Cet utilitaire a été étendu avec des fonctionnalités pour faire pivoter et retourner les images et la réduction des niveaux de gris dans la version 6b.
A partir de la version 6b de libjpeg du 27 mars 1998, Miyasaka Masaru a créé une branche nommée libjpeg/SIMD , qui incluait des optimisations x86 SIMD. Il a reçu des contributions substantielles des projets TigerVNC et VirtualGL en 2009. Sur cette base, le projet libjpeg-turbo a été créé en 2010.
Après 11 ans et un changement de direction, l'IJG a publié de nouvelles versions de libjpeg (7 à 9), dont chacune a rompu la compatibilité ABI avec les versions précédentes. Les changements qui étaient en perspective après la série 6x n'ont pas été livrés. Dans la version 7, la prise en charge du codage arithmétique a été introduite, qui a été précédemment rejetée en raison de la situation des brevets , ainsi que la fonction de recadrage dans jpegtran ( -crop
).
Les versions 8 et 9 ont servi essentiellement à l'introduction d'extensions de format incompatibles controversées. Celles-ci sont largement considérées comme inefficaces et inférieures aux solutions standardisées existantes. Leur standardisation a été rejetée après soumission à l' UIT-T . L'organisateur original Tom Lane et d'autres critiquent ces changements comme une rupture par rapport aux objectifs de l'IJG.
Le 4 mars 2014, la première version du fork d'optimisation de la taille des fichiers mozjpeg a été publiée. Pour cette version, Josh Aas de Mozilla Research a retravaillé le script Perl jpegcrush du développeur principal de x264 Loren Merritt et l'a intégré dans la base de code de libjpeg-turbo.
Le 10 juillet 2014, Mozilla a publié la version 2.0, qui a principalement ajouté la quantification en treillis et est désormais capable de réduire également la taille des JPEG de base. Facebook , Inc. a fait un don60 000 dollars pour le développement de la prochaine version, et CloudFlare a affecté un développeur pour l'amélioration de mozjpeg.
Versions
Version | Publié | Nouvelles fonctionnalités | |
---|---|---|---|
Compatible UIT T.81 JPEG | |||
1 | 1991 | Première version de base ou sortie JPEG GIF ou PPM optimisée |
|
2 | 1991 | Améliorations internes Plus de formats d'entrée/sortie |
|
3 | 1992 | Améliorations de la qualité interne et de l'image | |
4 | 1992 | Améliorations internes et de vitesse | |
4a | 1993-02-18 | ||
5 | 1994-09-24 | Améliorations internes et API révisée | |
5a | 1994-12-07 | ||
5b | 1995-03-15 | ||
6 | 1995-08-02 | JPEG jpegtran progressif (convertir entre la ligne de base et le progressif) |
|
6a | 1996-02-07 | ||
6b | 1998-03-27 | jpegtran étendu à la rotation sans perte Utilisé par libjpeg-turbo |
|
Extensions propriétaires non compatibles | |||
7 | 2009-06-27 | jpegtran étendu à une culture sans perte T.851 Arithmetic Coding |
|
8 | 2010-01-10 | Corrections internes jpegtran étendu pour utiliser SmartScale |
|
8a | 2010-02-28 | RVBA | |
8b | 2010-05-16 | ||
8c | 2011-01-16 | Taille de bloc DCT variable | |
8d | 2012-01-15 | JPEG RVB (pas de transformation de couleur en YCbCr) | |
9 | 2013-01-13 |
Couleur YCoCg Compression sans perte (1x1 DCT) |
|
9a | 2014-01-19 | " JFIFv 2" scRGB Large gamme de couleurs (standard inconnu) Couleur 8-12 bits (JPEG d'origine) |
|
9b | 2016-01-17 | ||
9c | 2018-01-14 | ||
9j | 2020-01-12 |
Légende: | Ancienne version, non maintenue | Ancienne version, toujours maintenue | Version stable actuelle |
---|
Fourches
Les forks bien connus sont libjpeg-turbo, qui optimise la vitesse d'exécution, et mozjpeg, qui optimise les fichiers plus petits.
Il existe également une bibliothèque du même nom de l' ISO , qui vise à être une implémentation complète des normes JPEG, JPEG XT et JPEG-LS .
libjpeg-turbo
Développeur(s) | Projet libjpeg-turbo |
---|---|
Première version | 2010 |
Version stable | 2.1.0 / 24 avril 2021
|
Site Internet | libjpeg-turbo |
libjpeg-turbo est un fork de libjpeg qui utilise les instructions SIMD pour accélérer l'encodage et le décodage JPEG de base. De nombreux projets utilisent maintenant libjpeg-turbo au lieu de libjpeg, y compris les distributions Linux populaires ( Fedora , Debian , Mageia , openSUSE , ...), Mozilla , et Chrome . Outre les performances, certains projets ont choisi d'utiliser libjpeg-turbo car cela leur permet de conserver une compatibilité ABI descendante avec l'ancienne version de libjpeg v6b. libjpeg v7, v8 et v9 ont rompu la compatibilité ABI avec les versions précédentes.
libjpeg-turbo peut être configuré pour être compatible avec l'ABI libjpeg v7 ou v8, mais il n'implémente pas l'ensemble complet des fonctionnalités des versions récentes d'IJG, y compris l'extension de format SmartScale. Le projet libjpeg-turbo a choisi de ne pas prendre en charge SmartScale, citant des préoccupations concernant le fait qu'il ne s'agit pas d'une norme ITU-T et citant leurs propres recherches qui remettent en question l'utilité de la fonctionnalité. Par extension, puisque la seule nouveauté majeure de libjpeg v9 est spécifique au format SmartScale, le projet libjpeg-turbo a choisi de renoncer à l'émulation de libjpeg v9. Par conséquent, les fichiers SmartScale créés par libjpeg v8 et versions ultérieures ne seront pas décompressés correctement par libjpeg-turbo.
libjpeg-turbo est l'une des deux implémentations de référence JPEG, disponible en tant qu'ISO/IEC 10918-7 et ITU-T T.873 . L'autre implémentation de référence est ISO libjpeg qui inclut également la prise en charge de JPEG XT et JPEG LS.
mozjpeg
Développeur(s) | Recherche Mozilla |
---|---|
Première version | 4 mars 2014 |
Version stable | 4.0.3 / 26 février 2021
|
Site Internet | github |
mozjpeg est un fork de libjpeg-turbo réalisé par Josh Aas et d'autres de Mozilla Research. Il vise à accélérer les temps de chargement des pages Web en obtenant une réduction de la taille des fichiers (d'environ 10 %) et donc du temps de transmission grâce à une amélioration de l'efficacité du codage tout en conservant la qualité de l'image. Pour y parvenir, il utilise plus de puissance de traitement pour l'encodage (asymétrie) tout en conservant une compatibilité totale avec la norme JPEG et ne nécessitant aucune modification côté décodeur.
Les techniques utilisées par mozjpeg pour obtenir une compression élevée incluent l'optimisation des arbres de Huffman , l'utilisation d'un codage progressif pour diviser de manière optimale le spectre des coefficients DCT en balayages séparés, et l'utilisation de la quantification en treillis . De plus, les préréglages sont réglés de manière agressive pour minimiser la taille des fichiers.
Outre libjpeg-turbo, mozjpeg s'appuie également sur jpegcrush, un script Perl de Loren Merritt.
ISO libjpeg
Développeur(s) | Thomas Richter /Référence JPEG AhG |
---|---|
Première version | 27 juillet 2012 |
Version stable | 1,55 / 20 juillet 2018
|
Licence | GNU GPLv3 |
Site Internet | github |
L'ISO/IEC Joint Photography Experts Group maintient une implémentation logicielle de référence pour les extensions JPEG de base (ISO/IEC 10918-1 et 18477-1) et JPEG XT (ISO/IEC 18477 Parties 2 et 6-9), ainsi que JPEG sans perte . LS (ISO/CEI 14495). Il inclut également certaines des optimisations de mozjpeg. Bien qu'également nommé libjpeg, il n'est pas lié au code source fourni par Independent JPEG Group (IJG) et ne prend pas en charge les extensions propriétaires introduites par IJG depuis 2007.
Voir également
Les références
Liens externes
- Site officiel du groupe JPEG indépendant
- FAQ JPEG
- JPEGclub – Fonctionnalités supplémentaires pour libjpeg
- Paquet binaire de libjpeg pour Windows (à GnuWin32 dans SourceForge.net)
- libjpeg-turbo , un fork de libjpeg compatible ABI/API qui utilise des instructions SIMD x86 pour obtenir une accélération substantielle par rapport à l'implémentation de référence.
- mozjpeg - le fork d'optimisation de la taille des fichiers sur GitHub
- Nyman, Robert; Aas, Josh (6 août 2014). "Utiliser mozjpeg pour créer des JPEG efficaces" . Hacks . Mozilla.