URL: https://linuxfr.org/news/gegl-0-3-0-et-babl-0-1-12-sont-de-sortie Title: GEGL 0.3.0 et babl 0.1.12 sont de sortie Authors: Jehan BAud, bubarđŸŠ„, palm123, BenoĂźt Sibaud, patrick_g et RyDroid Date: 2015ćčŽ06月10æ—„T19:17:55+02:00 License: CC By-SA Tags: gegl, gimp et babl Score: 58 Babl est une bibliothĂšque de conversion de formats de pixels. GEGL est un moteur de traitement d'images en graphe, construit autour de babl. Ce sont deux bibliothĂšques nĂ©es du projet GIMP, qui constitueront son nouveau moteur interne d'Ă©dition d'image dĂšs la version majeure suivante (GIMP 2.10, date de sortie non connue). Mais ce sont aussi bien plus que les moteurs de GIMP, ce sont surtout des projets indĂ©pendants qui commencent Ă  ĂȘtre utilisĂ©s par d'autres projets, que ce soient des logiciels Libres, comme des services propriĂ©taires. De nouvelles versions viennent de sortir (GEGL 0.3.0 et babl 0.1.12), et je profite donc de l'occasion pour prĂ©senter ces logiciels, leurs spĂ©cificitĂ©s, leurs historiques et leurs utilisations dans la seconde partie de la dĂ©pĂȘche. ---- [Note de sortie sur la liste de diffusion](https://mail.gnome.org/archives/gegl-developer-list/2015-June/msg00000.html) [babl](http://gegl.org/babl/) [GEGL](http://gegl.org/) [GIMP](http://gimp.org) ---- # babl # ![babl](http://gegl.org/babl/graphics/babl-a4poster.png) Babl est une bibliothĂšque de conversion de formats de pixels. Quand on parle de formats de pixels, on entend la reprĂ©sentation du pixel en mĂ©moire comme par exemple l'espace de couleur (RVB, CIE Lab...), une profondeur de couleur (nombre de bits utilisĂ©s par canal...) ou le type de donnĂ©es (entiers, flottants...), utilisĂ©s pour la reprĂ©sentation et non un format de fichier d'image pour enregistrer sur un espace de stockage. Ainsi, cela permet par exemple de traduire des reprĂ©sentations de pixels RVB, RVBA, CMJN, CIE Lab, etc. Babl ne fait pas de traitement d'image dans le but de la modifier, mais uniquement des conversions (les seules modifications Ă©tant par exemple de la perte Ă©ventuelle de donnĂ©es si on passe Ă  un format moins prĂ©cis, ou de l'approximation entre deux formats qui ne sont pas parfaitement Ă©quivalents bijectivement). Cette bibliothĂšque fournit une API extrĂȘmement petite (le dĂ©pĂŽt de source fait 4 Mo en tout, pour moins de 900 ko de code), simple et stable par conception. # GEGL # ![GEGL logo](http://gegl.org/images/GEGL.png) GEGL est une bibliothĂšque permettant de traiter des images sous la formes de graphes de nƓuds, chaque nƓud pouvant avoir des entrĂ©es, sorties et une configuration. Un nƓud reprĂ©sente ce qu'on appelle une "opĂ©ration". Typiquement, il y a des opĂ©rations servant principalement d'entrĂ©e Ă  partir d'image stockĂ©es en mĂ©moire ou sur disque, des opĂ©rations servant de sortie pour enregistrer ou afficher de nouvelles images, et des opĂ©rations intermĂ©diaires servant de filtres mathĂ©matiques pour modifier l'image entre le nƓud d'entrĂ©e et de sortie. Ces opĂ©rations intermĂ©diaires sont par exemple: * les filtres classiques que l'on aurait dans le menu "Filtres" de GIMP (flou, nettetĂ©, filtres artistiques, etc.); * des modifications des couleurs (balance, saturation, etc.); * de la composition (avec 2 images en entrĂ©e pour 1 en sortie, ce qui correspond notamment aux modes de composition des calques de GIMP : *normal, multiply, add, substract*, etc.): * des traitements plus utilitaires (dĂ©coupe, redimensionnement, rotation, etc.): * ... ## Formats d'images ## GEGL sait de base ouvrir et sauver de nombreux formats d'images, des plus classiques (PNG, JPEG, BMP, tiff...) aux formats plus spĂ©cialisĂ©s (RAW, OpenEXR...), et mĂȘme des formats vectoriels (SVG...). En outre, il sait tirer profit d'autres sources, comme des fichiers vidĂ©os (avec ffmpeg) ou de l'acquisition vidĂ©o directe (v4l). GEGL sait aussi tirer profit de trĂšs hautes prĂ©cisions de couleur (*high bit precision depth*), permettant par lĂ  de travailler sur des images Ă  8, 16, 32 ou mĂȘme 64 bits par canal (et en nombre entier ou flottant, avec codage linĂ©aire ou correction gamma), ainsi que de charger et sauver les donnĂ©es en haute prĂ©cision lorsqu'on utilise un format l'autorisant (comme ce sera le cas des [fichiers d'image de GIMP, XCF, Ă  la sortie de GIMP 2.10](http://libregraphicsworld.org/blog/entry/gimp-2.8-released-next-version-to-get-high-bit-depth-precision)). Cela permet des traitements intermĂ©diaires complexes avec beaucoup moins de perte de donnĂ©es et de qualitĂ©. ## Traitement d'image en graphe ## Si un traitement simple (toute action basique sur une image) peut ĂȘtre reprĂ©sentĂ© en un nƓud unique avec l'image en entrĂ©e et le rĂ©sultat en sortie, un traitement complexe est un graphe liant de multiples nƓuds. SchĂ©matiquement, travailler sur une image ressemble Ă  l'Ă©diteur de nƓuds de Blender. ![Éditeur de NƓuds de Blender](http://mango.blender.org/wp-content/uploads/2012/04/splashbot_nodes-540x234.png) Le traitement par graphe a deux intĂ©rĂȘts principaux: 1. Du **traitement "non destructif"** si l'interface logicielle le permet. Cela implique un flot de travail oĂč on ne touche jamais l'image originelle. Elle est en entrĂ©e, et toute modification du graphe influe sur les pixels dans le nƓud de sortie (qui peut ĂȘtre thĂ©oriquement le mĂȘme fichier que celui chargĂ© en entrĂ©e, mais alors cela rend le concept moins intĂ©ressant). On peut Ă  tout moment supprimer ou modifier les paramĂštres d'une opĂ©ration sans craindre pour l'image de base (plutĂŽt qu'appliquer, voir, annuler, refaire avec d'autres paramĂštres, revoir, et ainsi de suite). Le concept de traitement non destructif rend donc presque caduque le concept d'historique et d'annulation des opĂ©rations. 2. La **limitation de la dĂ©gradation d'une image** qui se produit lors de l'application de filtres. Un exemple explicite: une simple rotation d'image Ă  45° dĂ©grade une image. Si on se rend compte qu'on prĂ©fĂšre une rotation Ă  90° et qu'on applique donc une nouvelle rotation Ă  45° : on a alors dĂ©gradĂ© 2 fois l'image et on se retrouve avec une qualitĂ© trĂšs amoindrie par rapport Ă  l'original. Or une rotation Ă  90° directement se fait entiĂšrement sans perte (puisqu'on travaille dans des matrices de pixels). Si on avait sauvĂ© un graphe et qu'au lieu d'appliquer 2 rotations successives, on modifiait seulement les paramĂštres de la premiĂšre rotation, on se retrouve avec un traitement sans perte. Bien sĂ»r dans le cas gĂ©nĂ©ral, on aura de la dĂ©gradation, mais celle-ci peut ĂȘtre limitĂ©e par la crĂ©ation d'un graphe optimal qui ne sera appliquĂ© qu'une seule fois. ## DĂ©veloppement d'opĂ©rations maison ## GEGL est livrĂ© avec de nombreuses opĂ©rations par dĂ©faut, mais cela ne le rend pas exhaustif pour autant. La bibliothĂšque est conçue pour ĂȘtre Ă©tendue Ă  volontĂ© par les dĂ©veloppeurs. Vous avez besoin d'ajouter la prise en charge d'un format d'image maison ou peu rĂ©pandu ? Vous avez besoin d'un filtre qui n'a pas Ă©tĂ© dĂ©jĂ  dĂ©veloppĂ©, ou vous avez dĂ©veloppĂ© une version algorithmique bien plus efficace ? Vous avez besoin de traitements un peu particuliers qui servent spĂ©cifiquement Ă  votre application et n'auraient aucun sens en *upstream* ? Il n'y a pas besoin d'attendre que vos opĂ©rations soient intĂ©grĂ©es dans GEGL ou de le patcher. Vous pouvez crĂ©er et Ă©tendre GEGL Ă  l'infini. En ce sens, GEGL est un "cadriciel" (_framework_) pour la crĂ©ation d'opĂ©rations de traitement d'image. ## Scriptable ## GrĂące Ă  l'[introspection GObject](https://wiki.gnome.org/action/show/Projects/GObjectIntrospection), cette bibliothĂšque est accessible Ă  de nombreux langages tiers, notamment des langages de scripts (Python, Ruby, JavaScript, PHP...). Cela signifie notamment qu'il est possible de l'utiliser pour des petits scripts rapides ou en ligne de commande, et en augmente considĂ©rablement l'accĂšs. Bien sĂ»r, certains _wrappers_ existent dĂ©jĂ , permettant une encore meilleure intĂ©gration aux spĂ©cificitĂ©s d'un langage. Le [wrapper Python](https://github.com/jsbueno/python-gegl) est un bon exemple de bibliothĂšque maintenue. Voici par exemple un court script Python pour inverser une image avec GEGL : ```python import gegl x = gegl.Graph("png-load", "invert", "png-save") x[0].path = "/home/user/input.png" x[2].path = "/home/user/output.png" x() ``` Enfin, il est possible, avec l'outil console `gegl` fourni par dĂ©faut de lui passer des graphes d'opĂ©rations GEGL en XML, pour un traitement d'image scriptĂ©. ## Performance : OpenCL et multi-threading ## GEGL prend en charge [OpenCL](https://www.khronos.org/opencl/), langage de programmation et bibliothĂšque « *conçu pour programmer des systĂšmes parallĂšles hĂ©tĂ©rogĂšnes comprenant par exemple Ă  la fois un CPU multi-cƓur et un GPU* » (cf. [OpenCL sur WikipĂ©dia](http://fr.wikipedia.org/wiki/OpenCL)). En d'autres termes, cela permet de faire travailler votre carte graphique, en plus de votre processeur, en parallĂšle, pour accĂ©lĂ©rer les calculs. Cela couplĂ© avec du traitement "*thread-safe*" (pour vous autoriser Ă  utiliser du *multi-thread* dans votre propre code), et un dĂ©but de *multi-thread* dans GEGL mĂȘme, nous essayons d'obtenir une utilisation aussi performante que possible. ## Traitement de trĂšs grandes images ## Un des points forts de GEGL est sa gestion intelligente des *buffers* (objet gĂ©rant les donnĂ©es bitmap Ă  l'aide des formats de pixel babl), permettant Ă  l'utilisateur d'allouer une partie seulement de sa mĂ©moire, mais Ă©galement de travailler sur des images plus grandes que la mĂ©moire disponible. Un *buffer* GEGL est une matrice de dalles, chacune pouvant avoir un *backend* de stockage diffĂ©rent, en particulier en mĂ©moire RAM, ou en swap lorsque l'on dĂ©passe la mĂ©moire allouĂ©e. Dans l'avenir, on pourrait avoir un backend en mĂ©moire GPU, en rĂ©seau, etc. Cela permet ainsi d'avoir une majeure partie d'une image en mĂ©moire, ainsi qu'une autre partie en swap disque, lors du travail sur de trĂšs grandes images. Le travail en dalle autorise aussi un travail plus efficace lorsqu'il s'applique sur de petites parties d'une image. # Utilisation actuelle de GEGL # ## Historique et relation Ă  GIMP ## GEGL est un projet trĂšs ancien avec pour raison initiale son intĂ©gration dans GIMP. Les plus anciennes annonces officielles de GIMP datent de [1995](http://www.gimp.org/about/prehistory.html), et le plus vieux commit datĂ© du dĂ©pĂŽt de source est du 1^(er) janvier 1997. De son cĂŽtĂ©, le plus vieux commit datĂ© du dĂ©pĂŽt de source de GEGL est du... 2 janvier 1997, avec comme auteur "*People doing a 16 bpc version of gimp*" (traduisible en « personnes faisant une version de gimp Ă  16 bits par canal »). À un jour prĂšs, les dĂ©pĂŽts de source des deux projets ont donc Ă©tĂ© créés quasiment en mĂȘme temps. GEGL n'est donc pas seulement nĂ© de GIMP, c'est presque son frĂšre ! Certains n'ont cependant pas cru en GEGL (du moins pas suffisamment pour y consacrer du temps, ce qui a mĂȘme engendrĂ© un fork cĂ©lĂšbre de GIMP), et il faut avouer que cela a pris son temps (presque 20 ans !). La [premiĂšre tentative d'intĂ©gration n'est apparue qu'en 2008 dans GIMP 2.6](http://www.gimp.org/release-notes/gimp-2.6.html), soit 11 ans aprĂšs la naissance du projet GEGL. Cette version comprenait seulement un port des opĂ©rations de couleur sur GEGL, optionnel (par dĂ©faut les opĂ©rations de couleur utilisaient toujours le code non GEGL) et un outil « GEGL » expĂ©rimental (donc non disponible par dĂ©faut dans la boĂźte Ă  outils). Ainsi, cela initia un balbutiement du port oĂč rien n'Ă©tait activĂ© par dĂ©faut, mais pouvait l'ĂȘtre par l'utilisateur aventureux. [GIMP 2.8 a vu plusieurs autres ports de fonctionnalitĂ©s sur GEGL](http://www.gimp.org/release-notes/gimp-2.8.html), notamment la projection des calques, les modes de calques, les sĂ©lections flottantes et le redimensionnement des calques. NĂ©anmoins lĂ  encore, tous ces ports restaient dĂ©sactivĂ©s par dĂ©faut dans la version stable. Ainsi, bien que GEGL soit prĂ©sent dans GIMP depuis 7 ans, cette partie du code est techniquement inexistante pour les utilisateurs, du code mort, inutilisĂ©, dans le reste du programme. Dans les faits, GIMP ne contient donc pas encore de code GEGL du point de vue de l'utilisateur de base. C'est en 2012 que, finalement, deux contributeurs majeurs de GIMP (Mitch, mainteneur de GIMP et Pippin, mainteneur de GEGL) se sont un jour enfermĂ©s chez Mitch sans vraiment le planifier, et ne sont ressortis Ă  la lumiĂšre du jour que 3 semaines plus tard, [aprĂšs avoir portĂ© 90 % du cƓur applicatif de GIMP vers GEGL](http://gimpfoo.de/2012/04/17/goat-invasion-in-gimp/). ![Invasion des chĂšvres](https://git.gnome.org/browse/gimp/plain/data/images/gimp-splash.png?id=10715024bbc123e915f1c32fb6536e8e5e749325) Ces 90 % n'Ă©taient en fait que le dĂ©but. Car en plus du cƓur, il restait toute la plateforme applicative de GIMP (les greffons, filtres, etc.) Ă  porter, l'interface graphique Ă  mettre Ă  jour pour profiter du nouveau cƓur, les dĂ©tails Ă  fignoler et la bibliothĂšque Ă  optimiser. D'ailleurs, c'est seulement quelques mois aprĂšs cet Ă©vĂšnement que je suis arrivĂ© moi-mĂȘme dans ce projet : un peu par hasard aussi et sans le vouloir, un jour j'ai donnĂ© un patch. À l'Ă©poque, je n'avais mĂȘme jamais entendu parler de GEGL. Eh bien, laissez-moi vous dire que la version de dĂ©veloppement de GIMP, Ă  ce moment lĂ , Ă©tait totalement inutilisable, et ce, encore jusqu'Ă  il y a Ă  peine deux ans, car si lente que l'on pouvait donner un coup de pinceau puis aller prĂ©parer un cafĂ© en regardant le trait s'afficher (ou presque !). C'est seulement trĂšs rĂ©cemment que la bibliothĂšque a Ă©tĂ© massivement optimisĂ©e et commence Ă  peine Ă  atteindre la vitesse de la version prĂ©cĂ©dente du cƓur de GIMP pour les opĂ©rations de base (voire est plus rapide, dans pas mal de cas). ### Un avant-goĂ»t de GIMP 2.10 ### GIMP 2.10 sera donc la premiĂšre version oĂč GEGL sera utilisĂ©e, remplaçant le code originel de traitement d'image, ce qui est une Ă©tape majeure de l'histoire de GIMP. En fait, ce ne sera mĂȘme pas une alternative. Tout traitement d'image utilisera dĂ©sormais GEGL. Cela donnera Ă  GIMP la prise en charge de nombreux nouveaux formats de fichiers, de la haute prĂ©cision de couleur, une prĂ©visualisation (partielle ou totale) des effets directement dans le canvas pour peaufiner les paramĂštres, et surtout Ă  terme du traitement d'image non destructif. Mais... ceci est une histoire pour une prochaine news... :-) ## IntĂ©gration dans les bibliothĂšqes graphiques ## Il existe plusieurs bibliothĂšques intermĂ©diaires pour simplifier l'utilisation de GEGL : * GTK+: [GEGL-GTK](https://git.gnome.org/browse/gegl-gtk/); * Qt: [gegl-qt](https://git.gnome.org/browse/gegl-qt/); * Clutter: [gegl-clutter](https://git.gnome.org/browse/gegl-clutter); * ... ## Autres projets ## Bien que GEGL soit nĂ© de GIMP, c'est avant tout dorĂ©navant un projet Ă  considĂ©rer comme une bibliothĂšque indĂ©pendante. Et nous espĂ©rons que de plus en plus de projets l'intĂ©greront dans leur code. [Jon Nordby](http://www.jonnor.com/) est l'un des grands implĂ©menteurs de GEGL. Il a ainsi intĂ©grĂ© GEGL comme [backend supplĂ©mentaire](http://www.jonnor.com/2012/05/mypaint-and-goats-at-lgm2012/) dans [MyPaint](http://mypaint.intilinux.com/). Il a Ă©galement expĂ©rimentĂ© le traitement vidĂ©o par GEGL en implĂ©mentant un [filtre GEGL pour GStreamer permettant d'intĂ©grer un graphe GEGL dans son traitement vidĂ©o](http://www.jonnor.com/2011/05/geglfilter-gstreamer-element-for-manipulating-video-using-gegl/), bien que celui-ci n'ait finalement pas Ă©tĂ© intĂ©grĂ© *upstream*, non par intĂ©rĂȘt des dĂ©veloppeurs GStreamer, mais simplement par [manque de temps pour le porter sur l'interface changeante du projet](https://bugzilla.gnome.org/show_bug.cgi?id=650750) (laissant ouverte la possibilitĂ©). Son dernier gros projet, [imgflo](https://github.com/jonnor/imgflo), est un [serveur web pour le traitement d'image](http://www.jonnor.com/2014/04/imgflo-0-1-an-image-processing-server-and-flowhub-runtime/), avec une interface graphique orientĂ©e graphes. ![imgflo](https://pbs.twimg.com/media/BlCNHN9CAAAF9Vh.png) Jon Nordby Ă©tant dĂ©sormais employĂ© par [The Grid](https://thegrid.io/), plateforme commerciale de crĂ©ation de sites web gĂ©nĂ©rĂ©s par une intelligence artificielle, **imgflo**, et par consĂ©quent **GEGL** est utilisĂ© comme composant majeur pour toute l'automatisation des traitements d'image (ajustements de couleurs pour que les images utilisateurs s'adaptent au jeu de couleur du site, par exemple). Ce traitement passe par [imgflo-server](http://libregraphicsworld.org/blog/entry/artificial-intelligence-designs-websites-uses-open-technology-stack). Enfin le travail de Jon Nordby sur imgflo montre un des grands intĂ©rĂȘts de GEGL : Jon a dĂ©veloppĂ© un format JSON pour dĂ©clarer des graphes GEGL qui peuvent alors ĂȘtre [sauvĂ©s dans imgflo puis chargĂ©s dans GIMP](http://www.jonnor.com/2015/01/imgflo-0-3/), par exemple. Il est ainsi trĂšs simple de partager des processus de travail complets entre applications pour automatiser des traitements sur de multiples images. Bien entendu, cela a permis plusieurs amĂ©liorations de GEGL, sponsorisĂ©es par *The Grid*. En dehors de ce dĂ©veloppeur trĂšs prolifique, [GNOME-photos](https://wiki.gnome.org/Apps/Photos) dĂ©pend dĂ©sormais de [GEGL-gtk](http://www.gegl.org/gegl-gtk/). Certains autres projets bien Ă©tablis ont aussi montrĂ© leur intĂ©rĂȘt pour GEGL. [Darktable](http://darktable.org) par exemple avait [entamĂ© un port GEGL](http://www.darktable.org/2011/03/why-gimp-doesn%E2%80%99t-play-well-with-darktable/), en 2011 dĂ©jĂ , et annoncĂ© qu'ils le termineraient quand GIMP prendrait en charge la haute prĂ©cision des couleurs *et* l'Ă©dition non destructrice, ceci afin de pouvoir partager une image entre les deux applications. On est donc Ă  la moitiĂ© du chemin. [Blender](http://blender.org) a aussi montrĂ© son intĂ©rĂȘt pour GEGL, dans le but de mettre au niveau leur compositeur (« node editor », ou Ă©diteur de nƓuds en français), vieux et souffrant d'un design inadĂ©quat pour de la composition efficace, comme le montre cette [page de wiki](http://wiki.blender.org/index.php/Dev:Source/Node_Editor/Composite/Refactor) proposant l'usage de GEGL comme alternative Ă  une rĂ©-implĂ©mentation maison. Bien sĂ»r, rien ne dit s'ils agiront dans ce sens au final, mais ce serait une trĂšs bonne nouvelle, bĂ©nĂ©fique pour tous les projets. Nous dĂ©couvrons aussi des plus petits projets qui utilisent GEGL. Par exemple lors des [Libre Graphics Meeting 2014](http://libregraphicsmeeting.org/2014/), Manuel Quiñones a annoncĂ© son dĂ©but d'implĂ©mentation d'un logiciel d'animation 2D, [xsheet](https://github.com/manuq/xsheet). On ne sait pas vraiment ce que cela va donner, mais il est toujours intĂ©ressant de voir apparaĂźtre des dĂ©veloppeurs extĂ©rieurs qui commencent Ă  utiliser GEGL. Ces divers exemples montrent bien que le projet atteint une certaine maturitĂ©, et il faut maintenant continuer dans cette voie. # Note de sortie # Nous terminerons par un survol de la liste des nouveautĂ©s dans GEGL 0.3.0 et babl 0.1.12, qui comptent 92 contributeurs. * AmĂ©lioration du parallĂ©lisme et de la sĂ©curitĂ© du multi-tĂąche. * OpenCL est dĂ©sormais activĂ© par dĂ©faut si dĂ©tectĂ©. * Multi-tĂąche expĂ©rimental, activĂ© avec la variable d'environnement `GEGL_THREADS=`. * Rendu *mipmap* expĂ©rimental permettant la prĂ©visualisation sur des versions de petite taille de maniĂšre transparente, avec la variable d'environnement `GEGL_MIPMAP_RENDERING=true`. * Nouveau site web, [galerie d'opĂ©rations](http://gegl.org/operations.html#GEGL%20operations) et [navigateur d'API](http://gegl.org/operations.html#Gegl). * DĂ©couverte et documentation des opĂ©rations en ligne de commande, avec les options suivantes sur la commande `gegl`: `--list-all` (liste de toutes les opĂ©rations disponibles), `--properties` (imprime les dĂ©tails d'une opĂ©ration) et `--exists` (teste l'existence d'une opĂ©ration). * Prise en charge des *URI* pour le chargement d'image. * Chargement de meta-opĂ©rations en format JSON. * Nouvelles opĂ©rations: alien-map, antialias, apply-lens, bilateral-filter, bump.map, cartoon, channel-mixer, color-enhance, color-exchange, color-reduction, color-rotate, convolution-matrix, copy-buffer, cubism, deinterlace, diffraction-patterns, distance-transform, displace, edge, emboss, engrave, exposure, fractal-trace, high-pass, image-compare, illusion, invert-gamma, lens-flare, linear, linear-gradient, mosaic, motion-blur-circular, motion-blur-zoom, noise-cell noise-cie-lch, noise-hsv, noise-hurl, noise-pick, noise-rgb, noise-simplex, noise-spread, n-point deformation ops, oilify, panorama-projection, photocopy, plasma, radial-gradient, red-eye-removal, scale-size-keep-aspect, softglow, stretch-contrast, texturize-canvas, tile-glass, tile-seamless, tile-paper, tile, warp, whirl-pinch, wind, cache, cast-format, lcms-from-profile, npy-save, webp-load, webp-save, scale-ratio, scale-size, seamless-clone, sinus, supernova, value-propagate, video-degradation * RĂ©implĂ©mentation de gaussian-blur (plus rapide et prĂ©cis). * Nouveau backend de tuiles par dĂ©faut, Ă©crivant sur le disque en tĂąche sĂ©parĂ©e.

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