URL: https://linuxfr.org/news/sortie-de-yoga-image-optimizer-1-0 Title: Sortie de YOGA Image Optimizer 1.0 Authors: FLOZz Ysabeau đŸ§¶ et BenoĂźt Sibaud Date: 2021ćčŽ06月17æ—„T15:38:23+02:00 License: CC By-SA Tags: optimisation, image, jpeg, png, webp, gtk et python Score: 78 **YOGA Image Optimizer** est un utilitaire graphique libre (GPLv3) permettant de convertir et d’optimiser des images (on parle ici de rĂ©duire le poids des fichiers sans en diminuer la qualitĂ© perceptible). Il supporte la plupart des formats courants en entrĂ©e et gĂ©nĂšre en sortie des **JPEG**, des **PNG** et des **WebP** optimisĂ©s. La toute premiĂšre version est sortie il y a quelques jours, je viens donc vous prĂ©senter ce projet (ou plutĂŽt ces projets) sur lequel je travaille depuis quelque temps dĂ©jĂ ... đŸ˜€ïž ![Logo de YOGA Image Optimizer](https://tmp.fgsp.org/.dlfp_yogagtk1/yoga-image-optimizer_cover.png) ---- [Site officiel de YOGA Image Optimizer](https://yoga.flozz.org/) [DĂ©pĂŽt de code de YOGA Image Optimizer](https://github.com/flozz/yoga-image-optimizer) [PrĂ©sentation et benchmark de YOGA Image Optimizer](https://blog.flozz.fr/2021/06/14/optimisez-vos-images-avec-yoga-image-optimizer/) ---- ## Au commencement il y avait YOGA Notre histoire commence fin 2017. Dans le cadre du dĂ©veloppement d’application Web 3D (WebGL), Wanadev, l’entreprise pour laquelle je travaille, avait besoin d’un outil pour convertir les modĂšles 3D depuis les formats fournis par nos clients, vers des formats plus adaptĂ©s au Web. Et tant qu’à dĂ©velopper une moulinette qui fait la conversion, autant essayer d’optimiser tout ça au passage. C’est ainsi qu’un collĂšgue et moi-mĂȘme nous sommes penchĂ©s sur le sujet et avons commencĂ©s Ă  dĂ©velopper YOGA, le *« Yummy Optimizer for Gorgeous Assets »*. đŸ˜€ïž **YOGA** est Ă  la fois une **bibliothĂšque Python** et un **outil en ligne de commande** permettant : * De convertir des modĂšles 3D depuis divers formats vers **glTF** et **GLB** en les optimisant un peu au passage. Pour cela, il s’appuie sur la bibliothĂšque [Assimp](https://github.com/assimp/assimp), Ă  laquelle nous avons contribuĂ© pour l’occasion (les formats souhaitĂ©s n’étaient pas encore supportĂ©s, nous les avons donc implĂ©mentĂ©s dans la bibliothĂšque). * Et bien sĂ»r, les textures des modĂšles 3D Ă©tant des images, YOGA peut convertir et optimiser ces derniĂšres. DĂšs le dĂ©part il a Ă©tĂ© dĂ©cidĂ© que le projet serait *open source* ; il s’agit d’un juste retour des choses puisque nous nous basons sur le travail de nombreuses personnes Ă  travers des spĂ©cifications et des bibliothĂšques elles aussi *open source*. ## Puis vint YOGA Image Optimizer Depuis que YOGA est fonctionnel, je l’utilise pour optimiser les images que je publie sur le Web, et notamment sur mon blog. Avec le temps, j’ai de plus en plus ressenti le besoin d’avoir une interface graphique dans laquelle je puisse dĂ©poser mes images et les optimiser en un clic... **YOGA Image Optimizer** Ă©tait nĂ©. YOGA Image Optimzer et donc une interface graphique Ă©crite en Python / GTK pour la partie image de YOGA. ![Capture d’écran de YOGA Image Optimizer](https://tmp.fgsp.org/.dlfp_yogagtk1/yoga-image-optimizer_screenshot.png) Son utilisation est trĂšs simple : il suffit d’ajouter des images et d’appuyer sur le bouton « Optimiser ». Il est, bien sĂ»r, possible d’effectuer quelques rĂ©glages (choisir le format de sortie, la qualitĂ© souhaitĂ©e pour les formats avec perte, etc.). Pour le moment YOGA Image Optimizer traite deux images en parallĂšle quel que soit le nombre de CPU dont dispose votre machine, mais ceci sera configurable dans une future version du logiciel. đŸ˜‰ïž ## Assez de teasing, de combien on rĂ©duit les images ? Il est difficile de donner des chiffres prĂ©cis Ă©tant donnĂ© que l’efficacitĂ© de l’optimisation est variable et dĂ©pend du contenu de chaque image, mais je vais tout de mĂȘme vous donner des ordres de grandeur. Les chiffres prĂ©sentĂ©s ci-dessous sont obtenus en comparant les images optimisĂ©es par YOGA Ă  celles encodĂ©es par des bibliothĂšques de rĂ©fĂ©rence telles que *libjpeg* et *libpng*. * Pour les **JPEG**, YOGA rĂ©duit le poids des images de **27 %** en moyenne par rapport Ă  *libjpeg*. Pour ce faire il s’appuie sur la bibliothĂšque [Guetzli](https://github.com/google/guetzli/) dĂ©veloppĂ©e par *Google Research Europe*. * Pour les **PNG**, la rĂ©duction est de **20 %** en moyenne par rapport Ă  *libpng*. Cette fois-ci ce sont les bibliothĂšques [Zopfli et ZopfliPNG](https://github.com/google/zopfli) qui sont Ă  l’Ɠuvre. * Enfin, pour les **WebP**, les gains ne sont que de quelques pourcents seulement. Cela s’explique par le fait que YOGA utilise *libwebp*, comme tout le monde. Il n’existe, en effet, aucune bibliothĂšque plus performante pour le moment et YOGA se contente donc de pousser les paramĂštres d’encodage et de supprimer les mĂ©tadonnĂ©es des fichiers. Pourquoi avoir intĂ©grĂ© le format WebP si cela n’apporte finalement pas grand-chose ? Tout simplement par ce qu’il s’agit d’un format trĂšs performant. Une image encodĂ©e en WebP avec perte voit facilement son poids divisĂ© par deux par rapport Ă  un JPEG, et une image encodĂ©e en WebP sans perte a son poids rĂ©duit d’un bon tiers par rapport Ă  un PNG. Il est donc trĂšs intĂ©ressant de convertir des images vers ce format lorsque cela est possible. Voici deux petits graphiques pour rĂ©sumer les gains que l’on peut obtenir avec les diffĂ©rents encodeurs et formats. Celui de gauche permet de comparer les compressions Ă  pertes (JPEG et WebP avec perte), et celui de droite les formats sans perte (PNG et WebP sans perte). ![Graphique comparatif des diffĂ©rents formats et encodeurs](https://tmp.fgsp.org/.dlfp_yogagtk1/yoga_benchmark_diagram_encoders.png) Les chiffres prĂ©sentĂ©s ici sont issus d’un *benchmark* que j’ai rĂ©alisĂ© Ă  partir d’une sĂ©rie d’images variĂ©es (dessins, photos, *pixel art*, captures d’écran). Si vous souhaitez en apprendre davantage je vous invite Ă  lire [l’article que j’ai Ă©crit Ă  ce sujet](https://blog.flozz.fr/2021/06/14/optimisez-vos-images-avec-yoga-image-optimizer/). Les images, scripts et donnĂ©es utilisĂ©es pour rĂ©aliser ce *benchmark* [sont bien sĂ»r disponibles](https://github.com/flozz/yoga-image-benchmark) si vous souhaitez mener vos propres expĂ©riences. đŸ˜‰ïž ## OĂč est le piĂšge ? Évidemment, toutes ces optimisations ont un coĂ»t... et il peut ĂȘtre Ă©levĂ© dans certains cas. Pour les JPEG notamment, YOGA va en moyenne consommer 300 Mo de RAM par mĂ©gapixel, et aura besoin de 1 Ă  5 minutes, toujours par mĂ©gapixel de donnĂ©es. Les autres formats ont heureusement des consommations de ressources plus raisonnables. đŸ˜…ïž Pour mon cas d’utilisation ceci n’est pas un problĂšme car je publie rarement de trĂšs grandes images sur le web. La plupart du temps j’ouvre toutes les images d’un article avec YOGA Image Optimizer, je lance l’optimisation avant d’aller manger et il a fini quand je reviens... Mais il est possible que cela soit plus problĂ©matique pour d’autres. ## Conclusion Ce que je vous ai prĂ©sentĂ© aujourd’hui est la toute premiĂšre version de YOGA Image Optimizer. Elle me semble suffisamment aboutie pour ĂȘtre partagĂ©e, mais il me reste encore beaucoup de sujets sur lesquels travailler. En voici quelques-uns, en vrac : * Le bouton « Stop » ne permet pour le moment que d’annuler les futures optimisations et ne coupe pas celles dĂ©jĂ  commencĂ©es. Il s’agit d’une limitation dans l’API Python utilisĂ©e pour le *multiprocessing*, mais je vais travailler Ă  corriger ça. * La ligne de commande de YOGA propose une option pour redimensionner les images, je dois encore l’ajouter Ă  l’interface graphique. * J’ai [quelques pistes](https://www.reddit.com/r/linux/comments/nyedh4/optimize_your_images_with_yoga_image_optimizer/h1qo9kj/) pour amĂ©liorer encore un peu l’optimisation des JPEG et des PNG, il faut que je les creuse (et que je les implĂ©mente le cas Ă©chĂ©ant). * J’aimerais bien ajouter le support du format AVIF (un nouveau format d’image trĂšs prometteur). * Actuellement YOGA Image Optimizer n’est absolument pas configurable, il faut que je lui rajoute quelques options. J’espĂšre en tout cas que cet outil pourra vous ĂȘtre utile. Si vous avez des suggestions, des remarques ou des idĂ©es pour l’amĂ©liorer, n’hĂ©sitez pas Ă  les partager, c’est ce qui fait la force du logiciel libre ! đŸ˜ïž

AltStyle ă«ă‚ˆăŁăŠć€‰æ›ă•ă‚ŒăŸăƒšăƒŒă‚ž (->ă‚ȘăƒȘă‚žăƒŠăƒ«) /