URL: https://linuxfr.org/news/yoga-image-optimizer-v1-1-resultats-des-travaux-de-l-ete Title: YOGA Image Optimizer v1.1 : résultats des travaux de l'été Authors: FLOZz Benoît Sibaud, Ysabeau, bobble bubble et patrick_g Date: 2021-09-09T16:53:36+02:00 License: CC By-SA Tags: application, gtk, gtk3, image, optimisation, jpeg et png Score: 4 Je vous avais [présenté la toute première version](https://linuxfr.org/news/sortie-de-yoga-image-optimizer-1-0) de **YOGA Image Optimizer** (sous licence GPLv3) juste avant les vacances d’été, et je reviens aujourd’hui avec une nouvelle version pleine d’améliorations ! Si vous découvrez YOGA Image Optimizer avec cet article, sachez qu’il s’agit d’une interface graphique pour la bibliothèque [YOGA](https://github.com/wanadev/yoga) qui permet de **convertir et d’optimiser** (réduire le poids) des images. Elle accepte la plupart des formats courants en entrées, et supporte les formats **JPEG**, **PNG** et **WebP** en sortie. ![Capture d’écran de YOGA Image Optimizer v1.1](https://tmp.fgsp.org/.dlfp_yogagtk1.1/screenshot_yoga-image-optimizer_v1.1.png) ---- [Site web](https://yoga.flozz.org/) [Code source](https://github.com/flozz/yoga-image-optimizer) [Paquet Flatpak sur Flathub](https://flathub.org/apps/details/org.flozz.yoga-image-optimizer) [Liste détaillée des changements de YOGA Image Optimizer v1.1](https://blog.flozz.fr/2021/09/08/yoga-image-optimizer-v1-1-plein-de-nouveautes-pour-la-rentree/) ---- # Pour commencer, MERCI ! Avant de vous présenter les principales nouveautés du logiciel, je tenais à vous remercier. J’ai reçu **énormément** de messages et de retours suite à ma précédente publication, que ce soit en commentaire sous l’article publié ici, sur LinuxFr.org, ou via d’autres moyens (Mastodon, Reddit, Discord, e-mail…). Outre les messages d’encouragement, j’ai reçu énormément de conseils et d’astuces sur l’optimisation des différents formats d’images ; et on m’a également envoyé pléthore d’outils et de bibliothèques « concurrents » dont je ne soupçonnais pas toujours l’existence. Tout ça m’a déjà permis d’apporter des améliorations à YOGA, et ça ne fait que commencer ! On m’a également suggéré pas mal de fonctionnalités qui manquaient cruellement à la première version (qui était assez minimale), et certaines d’entre elles sont à présent implémentées. 😀️ On arrête là le *teasing* et on passe aux choses sérieuses ! 😉️ # Améliorations de l’optimisation des images Cette nouvelle version de YOGA Image Optimizer s’accompagne d’une mise à jour de la bibliothèque YOGA sur laquelle je travaille en parallèle. Et cette mise à jour apporte quelques améliorations sur l’optimisation des images. Pour commencer, cette nouvelle version réduit le poids des **JPEG** de **2.4 % à 7.3 % supplémentaires** par rapport à la version précédente de YOGA. Ceci a été rendu possible grâce à [MozJPEG](https://github.com/mozilla/mozjpeg) dont on utilise à présent une partie des optimisations en complément de [Guetzli](https://github.com/google/guetzli/), et ceci se fait sans perte de qualité supplémentaire : on applique uniquement les optimisations sans perte de MozJPEG (passage d’un encodage séquentiel à un encodage progressif, et optimisation de la table de Huffman) une fois l’encodage effectué par Guetzli. D’ailleurs cet ajout de MozJPEG dans YOGA a donné naissance à une nouvelle bibliothèque, [mozjpeg-lossless-optimization](https://github.com/wanadev/mozjpeg-lossless-optimization), qui permet d’accéder aux optimisations de MozJPEG depuis le langage de programmation Python. Et tant qu’on parle du format JPEG, YOGA prend maintenant en charge la métadonnée EXIF d’orientation ce qui lui permet de toujours sortir les images dans le bon sens. L’autre amélioration de YOGA porte sur le **format PNG**. Dans de rares cas, la première version de la bibliothèque pouvait sortir des PNG légèrement plus gros en sortie qu’en entrée. C’était notamment possible lorsque l’image avait déjà été (particulièrement bien) optimisée par un autre logiciel. Le problème se produisait d’ailleurs sur l’avatar de l’un des membres de LinuxFr.org. Quoi qu’il en soit ceci ne peut plus se produire : dans le pire des cas l’image de sortie fera le même poids que celle d’entrée (et, en général, YOGA arrivera quand même à gratter quelques octets). Pour arriver à ce résultat, lors d’une optimisation PNG vers PNG, YOGA compare la taille du fichier de sortie et celui d’entrée, et s’il s’avère que le résultat est moins optimal, il sort alors son scalpel et commence à opérer lui-même. Pour résumer l’opération, il va aller récupérer les morceaux (*chunks*) essentiels dans l’image d’entrée, il va concaténer les *chunks* `IDAT` qui contiennent les données de l’image, puis il va recompresser le tout avec [Zopfli](https://github.com/google/zopfli) et enfin recoller tout ça pour former un nouveau fichier PNG. # Nouveautés de l’interface graphique Passons à présent aux nouveautés de l’interface graphique. Pour commencer, YOGA Image Optimizer est maintenant configurable. Une toute nouvelle fenêtre de configuration a donc fait son apparition. Cette dernière permet actuellement : * de choisir combien de *threads* seront utilisés pour l’optimisation des images (donc combien d’images seront optimisées en parallèle), * de sélectionner le thème GTK à utiliser et de choisir s’il faut utiliser de préférence la variante sombre (lorsque celle-ci est disponible), * et enfin, il est à présent possible de choisir comment sera formé le nom et l’emplacement des fichiers de sorties parmi trois possibilités : * « À côté du fichier original » : le fichier de sortie se retrouvera dans le même dossier que celui d’entrée, mais il sera suffixé avec `.opti`. Il s’agit du comportement déjà présent dans la première version. * « Dans un sous dossier » : un dossier nommé « `optimized/` » est créé à côté du fichier d’entrée et l’image optimisée sortira dans celui-ci en conservant le nom de l’image d’entrée. * « Motif personnalisé » : permet de choisir finement le résultat désiré. ![Capture d’écran de la fenêtre de configuration](https://tmp.fgsp.org/.dlfp_yogagtk1.1/screenshot_settings_window.png) Ensuite, l’une des fonctionnalités qui m’a été énormément demandée était de pouvoir **sélectionner plusieurs images** à la fois, afin de permettre l’édition de leurs paramètres d’un seul coup. Cette fonctionnalité avait été écartée de la première version par souci de simplicité (il s’agissait à ce moment-là de réussir à sortir une base que l’on pourrait améliorer par la suite). Je suis donc heureux de vous annoncer que c’est maintenant possible, comme vous pourrez le constater dans la petite vidéo ci-dessous : ![Vidéo : démonstration de la multi sélection](https://tmp.fgsp.org/.dlfp_yogagtk1.1/multiselection_demo.webp) Une autre fonctionnalité qui était elle aussi très attendue, était la possibilité de redimensionner les images. En fait, YOGA (la bibliothèque), permettait déjà de le faire, mais cette fonctionnalité n’était pas exposée dans la première version de l’interface graphique. YOGA Image Optimizer v1.1 corrige ce manque et permet donc de redimensionner les images. Il est toutefois important de noter que YOGA permet uniquement **de réduire** la taille d’une image et conservera toujours les proportions. ![Capture d’écran de la fonctionnalité de redimensionnement](https://tmp.fgsp.org/.dlfp_yogagtk1.1/screenshot_image_resize.png) Enfin, dernière amélioration majeure : le bouton « Arrêter ». Dans la première version de YOGA Image Optimizer, ce bouton ne permettait que d’annuler l’optimisation des images en attente. Celles déjà en cours continuaient à s’optimiser en arrière-plan, consommant donc inutilement les ressources de la machine. Ce « problème » était dû à une limitation de l’API Python utilisée, et un gros travail a été effectué dans cette version afin que le bouton puisse effectivement arrêter les optimisations déjà en cours. Maintenant quand on dit « Stop », c’est stop ! 😤️ ![Capture d’écran du bouton « Arrêter »](https://tmp.fgsp.org/.dlfp_yogagtk1.1/screenshot_stop_button.png) # Et ensuite ? Je ne compte pas m’arrêter en si bon chemin, et je vais continuer à améliorer le logiciel. L’interface graphique dispose de toutes les fonctionnalités dont j’ai besoin, elle évoluera donc probablement assez peu dans les prochains mois (mais n’hésitez pas si vous avez des idées !). Par contre j’ai encore de nombreux projets pour YOGA, la bibliothèque qui effectue les optimisations sous le capot. Je compte notamment étudier l’inclusion de [pngquant](https://pngquant.org/) afin de proposer des optimisations PNG à perte mais encore plus efficace (ce sera évidemment optionnel, hein 😜️). Je voudrais également me pencher davantage sur le WebP pour produire des images encore plus petites dans ce format. Enfin je souhaiterais intégrer davantage de formats de sortie, et je m’intéresse notamment à [AVIF](https://en.wikipedia.org/wiki/AV1#AV1_Image_File_Format_(AVIF)) et à [JPEG XL](https://en.wikipedia.org/wiki/JPEG_XL). Quoi qu’il en soit, j’espère que YOGA pourra vous être utile, et je reste à l’écoute de toute suggestion, idée ou astuce pour pousser ce projet toujours plus loin ! 😁️