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Ă ... đïž  ---- [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.  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).  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 ! đïž