URL: https://linuxfr.org/users/julien_jorge/journaux/outils-autour-de-gimp-pack-my-sprites-et-xcftools Title: Outils autour de Gimp : Pack My Sprites et Xcftools Authors: Julien Jorge Date: 2013年02月15日T23:39:27+01:00 License: CC By-SA Tags: gimp, sprite et jeu_vidéo Score: 31 [Gimp](http://www.gimp.org) est un logiciel libre de traitement d'images matricielles. La dernière version est sortie en mai 2012 et avait bien sûr été [présentée sur LinuxFR](http://linuxfr.org/news/gimp-2-8-est-sorti-une-fenetre-unique). C'est aussi un logiciel phare du monde du libre, pour lequel de nombreux greffons sont développés et autour duquel plusieurs outils gravitent. Je vais vous parler de deux outils qui m'intéressent particulièrement : **Pack My Sprites** et **Xcftools**. # Pack My Sprites # [Pack My Sprites](http://www.stuff-o-matic.com/pack-my-sprites/) est un outil qui génère des feuilles de _sprites_ à partir d'une ou plusieurs images au format XCF. Il s'agit d'un outil que j'ai développé durant la production d'[Andy's Super Great Park](http://www.stuff-o-matic.com/asgp/). Il est écrit en C++ et diffusé sous les termes de la GPL 3. L'idée de départ était de réduire autant que possible le temps qui séparait la réalisation d'une image dans Gimp et sa visualisation dans le jeu. En effet, avec un outil classique de création de feuilles de _sprites_, je dois répéter les étapes suivantes à chaque fois que je veux voir l'image dans le jeu : * Dimensionner l'image à sa taille finale ; * Sélectionner les calques du _sprite_ et masquer les autres ; * Exporter l'image dans un fichier png ; * Répéter les deux étapes précédentes pour chaque image ; * Lancer le logiciel de création de feuille de _sprite_ ; * Sélectionner les images ; * Générer la feuille. Chacune de ces étapes est répétitive et inutile, et devrait donc être automatisée. J'avais donc besoin d'un logiciel de création de feuille de _sprites_ qui fonctionne directement avec mes images sources : les fichiers XCF que je crée avec Gimp. Pack My Sprites se distingue d'autres outils de créations de feuilles de sprites tels que [Sprite Sheet Packer](http://spritesheetpacker.codeplex.com/), [Texture Packer](http://www.codeandweb.com/texturepacker), [glue](http://github.com/jorgebastida/glue) ou encore [Nanimstudio](http://bci.im/projects/nanim/index#nanimstudio), sur différents points : * il travaille directement avec les fichiers XCF plutôt qu'avec des images intermédiaires ; * il fonctionne sans interface graphique afin de faciliter l'automatisation de la génération des feuilles de _sprites_ (`glue` est aussi un outil en ligne de commandes) ; * il sait générer des fichiers [Makefile](http://fr.wikipedia.org/wiki/Makefile "Définition Wikipédia") qui recréent les feuilles de _sprites_ quand les fichiers XCF sont modifiés. ## Exemple d'utilisation ## Voici une capture de la fenêtre de Gimp dans laquelle j'ai dessiné une animation d'un oiseau qui vole: ![Oiseau dans Gimp](http://www.stuff-o-matic.com/pack-my-sprites/assets/bird-in-gimp.png) Pour produire la feuille de _sprites_ depuis cette image et une autre, j'écris le fichier suivant décrivant chaque _sprite_ de l'animation : ``` /* file bird.spritedesc */ sprite_sheet "bird" 256 x 256 order "height" /* The source images. */ fly "bird-fly.xcf.bz2" afraid "bird-afraid.xcf.bz2" /* The sprites. */ "afraid" autosize * 0.33 with afraid "eyes" "beak" "body" "tail" ; "fly 1" autosize * 0.33 with fly "body" "eyes" "back wing 1" "wing 1" ; "fly 2" autosize * 0.33 with fly "body" "eyes" "back wing 2" "wing 2" ; "fly 3" autosize * 0.33 with fly "body" "eyes" "back wing 3" "wing 3" ; /* etc. */ ``` Puis j'exécute la commande suivante pour générer la feuille de _sprites_ : ``` pack-my-sprites bird.spritedesc ``` La commande produit deux fichiers. La feuille de _sprites_ : ![Les sprites de l'oiseau](http://www.stuff-o-matic.com/pack-my-sprites/assets/bird.png) et un fichier contenant la position et la taille des _sprites_ dans la feuille : ``` fly 1: 0 0 75 84 fly 2: 76 0 75 84 fly 3: 152 0 75 84 fly 4: 0 85 75 84 fly 5: 76 85 75 84 fly 6: 152 85 75 84 fly 7: 0 170 75 84 fly 8: 76 170 75 84 afraid: 152 170 94 69 ``` ## Obtenir l'outil ## L'outil est disponible depuis [son site Web](http://www.stuff-o-matic.com/pack-my-sprites/) ainsi que sur [GitHub](http://github.com/j-jorge/pack-my-sprites). Il n'y a pas de paquets pour les distributions pour l'instant. Son utilisation nécessite l'installation de xcfinfo et de gimp. ## Améliorer l'outil ## La version mise en ligne a été suffisante durant le développement de notre jeu mais elle peut encore être améliorée. Par exemple, au niveau de la syntaxe du fichier de description des _sprites_, on peut supprimer la liste des fichiers XCF et les nommer directement lors de la déclaration d'un _sprite_. L'algorithme de placement des _sprites_ dans la feuille est assez rudimentaire. Plusieurs [méthodes de calculs](https://github.com/juj/RectangleBinPack) existent et mériteraient d'être explorées. L'utilisation de xcfinfo et gimp se fait par un appel à [popen()](http://manpagesfr.free.fr/man/man3/popen.3.html). Pour le premier on lit le résultat de la commande pour récupérer les informations sur les calques, pour le second on passe un script [Scheme](http://fr.wikipedia.org/wiki/Scheme "Définition Wikipédia") qui génère l'image finale. Ce serait plus classe si on passait directement par une bibliothèque de manipulation des XCF. Enfin, comme l'outil s'appuie sur xcfinfo, il ne pourra pas être disponible sous Windows tant que Xcftools ne l'est pas non plus. # Xcftools # Xcftools est une suite d'outils en ligne de commandes pour extraire des informations de fichiers au format [XCF](http://fr.wikipedia.org/wiki/XCF "Définition Wikipédia"). Ces commandes sont : * xcf2pnm, pour convertir un fichier XCF en un fichier [Portable_anymap](http://fr.wikipedia.org/wiki/Portable_anymap "Définition Wikipédia") ; * xcf2png, pour convertir un fichier XCF en un fichier [Portable_Network_Graphics](http://fr.wikipedia.org/wiki/Portable_Network_Graphics "Définition Wikipédia") ; * xcfview, pour afficher un fichier XCF à l'écran ; * xcfinfo, pour extraire des informations sur les calques d'un fichier XCF. Les outils de conversion permettent de choisir les calques à utiliser et même de changer leur mode de composition. Ces outils ont soudainement prit un coup de vieux avec la sortie de Gimp 2.8 et ses groupes de calques. En effet, Xcftools a été écrite pour gérer les images de la version 2.6 de Gimp et même si elle arrive à extraire des informations des images au nouveau format, le résultat n'est pas toujours celui espéré. ## Reprise du développement ## Cette suite d'outils a initialement été développée par Henning Makholm. La dernière version est sortie en juillet 2009, sous licence GPL 2 d'après [le site de l'auteur](http://henning.makholm.net/software), ou dans le domaine public d'après les sources. Je suis particulièrement intéressé par l'outil xcfinfo, notamment pour Pack My Sprites ; c'est pourquoi j'ai envoyé un patch à l'auteur pour y ajouter la gestion des groupes de calques. Comme je n'ai pas reçu de réponse, j'ai décidé de forker [le projet sur GitHub](http://github.com/j-jorge/xcftools) pour y ajouter ce patch et reprendre un peu le développement. ## T'es le bienvenu ## Les premières modifications que j'ai faites ont été d'ajouter l'affichage de la hiérarchie des calques dans xcfinfo, puis d'entamer une migration du système de construction vers [CMake](http://www.cmake.org/) afin de pouvoir compiler pour Windows (c'est la branche cmake sur GitHub). En effet, la suite utilisait un mélange d'autotools et de scripts divers qui, combinés avec quelques macros bien placées dans le code, permettaient d'obtenir un logiciel qui compile. Vous l'aurez compris, ces outils sont développés en C. Les outils me conviennent très bien dans leur état actuel. Cependant il est clair qu'ils sont incomplets tant qu'ils ne gèrent pas correctement les groupes de calques ; c'est pourquoi j'hésite à packager tout de suite une nouvelle version. De plus, aucune des améliorations que j'entrevois ne me motive ; c'est pourquoi je cherche des gens intéressés pour les prendre en main. Idéalement il faudrait adapter le code d'aplatissement de l'image afin de prendre en compte le mode de composition des groupes de calques. Il faudrait aussi gérer les groupes quand les calques sont passés en paramètres au programme. Dans l'absolu on pourrait utiliser libgimp pour composer les images au lieu de refaire les algos en interne. Ça me semblerait bien plus simple mais on s'éloignerait de la philosophie initiale de l'outil.

AltStyle によって変換されたページ (->オリジナル) /