libjpeg-turbo, un codec pour encoder et décoder des images JPEG

libjpeg-turbo

libjpeg-turbo était à l'origine basé sur libjpeg/SIMD , un dérivé accéléré par MMX de libjpeg v6b

Sous Linux, en ce qui concerne les codecs, la plupart des utilisateurs ne s'en soucient généralement pas, car dans de nombreuses distributions, ce problème est généralement déjà résolu en étant inclus dans la cible par défaut, en plus de visualiser ou d'éditer des applications, Ils apportent également leur grain de sable, y compris quelques extras.

Mais que se passe-t-il lorsqu'un utilisateur souhaite améliorer les performances dans certains aspects, par exemple pour des tâches d'édition ou pour de simples loisirs. Dans cette partie, tous les utilisateurs ne sont pas impliqués, mais pour ceux qui sont intéressés, ils ont tendance à rechercher les avantages et les inconvénients de chaque format.

Et c'est là qu'intervient le codec dont nous allons parler aujourd'hui et c'est qu'en tant que tel le format d'image JPEG est l'un des plus populaires, mais cela ne veut pas dire qu'il est le meilleur, car il existe d'autres formats qui offrent de nombreux avantages par rapport à cela.

libjpeg-turbo est une solution à certaines des lacunes du format JPEG par rapport à d'autres formats, comme indiqué dans son dépôt GitHub :

libjpeg-turbo est un codec d'image JPEG qui utilise les instructions SIMD pour accélérer la compression et la décompression JPEG de référence sur les systèmes x86, x86-64, Arm, PowerPC et MIPS, ainsi que la compression JPEG progressive sur x86, x86-64 et arm . Sur de tels systèmes, libjpeg-turbo est généralement 2 à 6 fois plus rapide que libjpeg, toutes choses étant égales par ailleurs. Sur d'autres types de systèmes, libjpeg-turbo peut toujours surpasser libjpeg de manière significative, grâce à ses routines de codage Huffman hautement optimisées. Dans de nombreux cas, les performances de libjpeg-turbo rivalisent avec celles des codecs JPEG propriétaires à haut débit.

libjpeg-turbo implémente à la fois l'API libjpeg traditionnelle et l'API TurboJPEG moins puissante mais plus simple. libjpeg-turbo propose également des extensions d'espace colorimétrique qui lui permettent de compresser/décompresser vers des tampons de pixels 32 bits et big-endian (RGBX, XBGR, etc.), ainsi qu'une interface Java complète.

Libjpeg-turbo est une version dérivée de la bibliothèque libjpeg classique, conforme aux normes API/ABI , conçue pour offrir des vitesses d'encodage et de décodage optimales. Outre l'API standard de libjpeg, cette bibliothèque propose sa propre API TurboJPEG ainsi que plusieurs extensions avec des modèles de rendu des couleurs permettant de compresser les images en tampons de pixels 32 bits (RGBX, XBGR) ou de les décoder.

Sur d'autres architectures, l'accélération n'est pas aussi significative, mais grâce à l'utilisation de fonctions d'encodage Huffman optimisées, la bibliothèque reste sensiblement plus rapide que libjpeg et se rapproche en termes de performances des codecs JPEG propriétaires de haute qualité.

Il convient de mentionner qu'ibjpeg-turbo a récemment reçu sa nouvelle branche 3.0 , et les principales innovations mises en avant dans cette nouvelle version sont les suivantes :

  • Ajout de la prise en charge du sous-échantillonnage de couleur 4:1:1, vous permettant de convertir, recadrer et faire pivoter des images JPEG sous-échantillonnées 4:1:1 sans perte de qualité, ainsi que de les décompresser et de les convertir au modèle de couleur YUV.
  • Calcul significativement accéléré des tables de Huffman optimales. Pour les petites images (256 × 256), le changement a permis de réduire jusqu'à deux fois le temps de compression.
  • Ajout de la possibilité d'appliquer un codage entropique arithmétique pour les images JPEG avec une représentation des couleurs 12 bits par canal.
  • L'API TurboJPEG a été considérablement repensée pour supprimer les limitations existantes et augmenter l'extensibilité. Par exemple, toutes les fonctions C sont désormais préfixées par "tj3".
  • De nombreux drapeaux et modes ont été convertis d'arguments de fonction en paramètres généraux d'API.
  • Prise en charge des images avec 12 et 16 bits de couleur par canal en modes avec et sans perte.
  • Le mode de fichier JPEG sans perte a été ajouté, qui est disponible pour les images avec 8, 12 et 16 bits de couleur par canal. Ajout de la nouvelle fonction jpeg_enable_lossless() et de l'option de ligne de commande "-lossless".
  • Suppression des champs, constructeurs et méthodes obsolètes dans l'API Java TurboJPEG.

Enfin, il convient de mentionner qu'à l'avenir, l'auteur de libjpeg-turbo a l'intention de limiter le travail sur le projet à la seule publication de mises à jour avec des corrections de bogues. Le développement de la nouvelle version 3.1 ne commencera pas tant que le financement du projet n'aura pas été obtenu.

Pour ceux que le code intéresse , il est distribué sous trois licences de type BSD : IJG, BSD modifiée et zlib. Les binaires sont disponibles pour Linux, macOS et Windows. Vous trouverez plus d'informations et pourrez télécharger les binaires en suivant ce lien.


Ajouter comme source préférée dans Google