Article de reference

libjpeg

libjpeg est une bibliothèque libre avec des fonctions pour gérer le format de données d'image JPEG . Elle implémente un codec JPEG (encodage et décodage) ainsi que divers utilit...

libjpeg est une bibliothèque libre avec des fonctions pour gérer le format de données d'image JPEG . Elle implémente un codec JPEG (encodage et décodage) ainsi que divers utilitaires pour gérer les données JPEG. Elle est écrite en C et distribuée en tant que logiciel libre avec son code source sous les termes d'une licence de logiciel libre personnalisée permissive ( de type BSD ), qui exige une attribution . La variante originale est maintenue et publiée par l'Independent JPEG Group (IJG). Entre-temps, il existe plusieurs forks avec des fonctionnalités supplémentaires.

Les images JPEG JFIF sont largement utilisées sur le Web. Le niveau de compression peut être ajusté 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 certains 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

jpegtran transforme les données JPEG sans réencodage
(ici avec l'interface utilisateur CropGUI )

Le programme de ligne de commande jpegtran fournit plusieurs fonctions permettant respectivement de reformater et de recoder la représentation des coefficients DCT , de transformer les données d'image réelles et de supprimer les données auxiliaires dans les fichiers JPEG. Les transformations concernant la représentation des coefficients comprennent :

Ces transformations sont toutes entièrement sans perte et réversibles. Les transformations sur les données d'image comprennent :

  • éliminer les données non standard spécifiques à l'application 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 paliers de 90 degrés,
    • recadrage ou jonction aux bordures des blocs d'images (tous les 8×8 ou 16×16 pixels),
    • redimensionnement.

Ces opérations sont sans perte et réversibles uniquement en ce qui concerne les données d'image conservées. Il n'y a pas de recodage avec quantification répétée avec perte des données d'image ( perte de génération ).

Histoire

L'implémentation JPEG de l'Independent JPEG Group (IJG) a été publiée pour la première fois le 7 octobre 1991 et a été considérablement développée depuis lors. Le développement a été initialement 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, qui est sortie le 24 septembre 1994, l'ensemble du code a été réécrit. Elle a introduit les programmes utilitaires rdjpgcom et wrjpgcom pour gérer les commentaires de texte intégrés. La version 6 du 2 août 1995 est arrivée avec la prise en charge du JPEG progressif et pour la première fois avec le programme utilitaire jpegtran . Cet utilitaire a été étendu avec des fonctionnalités de rotation et de retournement des images et de réduction des niveaux de gris dans la version 6b.

libjpeg-turbo et descendants

À partir de la version 6b de libjpeg du 27 mars 1998, Miyasaka Masaru a créé une branche nommée libjpeg/SIMD , qui comprenait des optimisations SIMD x86. Elle 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.

Le 4 mars 2014, la première version du fork d'optimisation de taille de fichier 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 également capable de réduire la taille des fichiers JPEG de base. Facebook , Inc. a fait un don60 000 dollars pour le développement de la prochaine version, et CloudFlare a assigné un développeur pour l'amélioration de MozJPEG.

En 2019, libjpeg-turbo est devenue l'implémentation de référence approuvée par l'ISO et l'UIT pour le format JPEG.

En avril 2024, Google a présenté Jpegli , une nouvelle bibliothèque de codage JPEG qui offre des capacités améliorées et une amélioration du taux de compression de 35 % avec des paramètres de compression de haute qualité, tandis que la vitesse de codage est comparable à celle de MozJPEG.

Changement à la tête de l'IJG

Après 11 ans et un changement de direction, l'IJG sous la direction de Guido Vollbeding a publié de nouvelles versions de libjpeg (7 à 9), dont chacune a rompu la compatibilité ABI avec les versions précédentes. changements qui étaient prévus après la série 6x n'ont pas été livrés. [17] Dans la version 7, la prise en charge du codage arithmétique a été introduite, ce qui avait été rejeté auparavant 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 formats controversées incompatibles. 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 avec les objectifs de l'IJG.

Versions

Fourches

Les forks les plus connus sont libjpeg-turbo, qui optimise la vitesse d'exécution, et MozJPEG, qui optimise les tailles de fichiers plus petites.

Il existe également une bibliothèque portant le même nom de l' ISO , qui vise à être une implémentation complète des normes JPEG, JPEG XT et JPEG-LS .

libjpeg-turbo

libjpeg-turbo est un fork de libjpeg qui utilise des instructions SIMD pour accélérer l'encodage et le décodage JPEG de base. De nombreux projets utilisent désormais libjpeg-turbo au lieu de libjpeg, notamment 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 la compatibilité ABI avec l'ancienne version libjpeg v6b. libjpeg v7, v8 et v9 ont rompu la compatibilité ABI avec les versions précédentes.

libjpeg-turbo implémente le codage arithmétique conforme à la norme et les fonctionnalités de recadrage sans perte vues dans libjpeg v7. Il peut également être configuré pour être compatible avec l'ABI libjpeg v7 ou v8, mais il implémente la mise à l'échelle DCT et le SmartScale propriétaire, qui s'appuie sur la mise à l'échelle DCT. libjpeg-turbo choisit de ne pas prendre en charge SmartScale, car il ne s'agit pas d'une norme ITU-T et parce que leurs propres recherches le trouvent (et la mise à l'échelle DCT) inefficace. Par extension, puisque la seule nouvelle fonctionnalité majeure de libjpeg v9 est spécifique au format SmartScale, le projet libjpeg-turbo a choisi de renoncer à l'émulation de libjpeg v9.

Depuis 2019, libjpeg-turbo est l'une des deux implémentations de référence JPEG, disponibles sous les normes 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

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 réduisant la taille des fichiers (d'environ 10 %) et donc le 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 en ne nécessitant aucune modification du côté du décodeur.

Les techniques utilisées par MozJPEG pour atteindre 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 analyses distinctes et l'utilisation de la quantification en treillis . De plus, les préréglages sont optimisé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.

Jpegli

En avril 2024, Google a présenté Jpegli , une nouvelle bibliothèque de codage JPEG qui offre des capacités améliorées et une amélioration du taux de compression de 35 % avec des paramètres de compression de haute qualité, tandis que la vitesse de codage est comparable à celle de MozJPEG.

ISO libjpeg

Le groupe d'experts en photographie ISO/IEC maintient une implémentation logicielle de référence pour le format JPEG de base (ISO/IEC 10918-1 et 18477-1) et les extensions JPEG XT (ISO/IEC 18477 Parties 2 et 6-9), ainsi que le format JPEG-LS sans perte (ISO/IEC 14495). Il inclut également certaines des optimisations de MozJPEG. Bien qu'il soit également nommé libjpeg, il n'est pas lié au code source fourni par l'Independent JPEG Group (IJG) et ne prend pas en charge les extensions propriétaires introduites par l'IJG depuis 2007.

Plus d articles de Worldlex Wiki

Revenez a l index pour explorer davantage de pages sur l histoire, la science, la culture, la geographie et la societe en francais.

Explorer l index