[Tutoriel] Utiliser le Sprite Optimizer
Posté le 19/08/2018 16:39
Ce topic a pour but d'être à la fois la doc et la page de discussion de l'outil.
Ce document peut ne pas être à jour. La référence officielle est le dépôt GitLab
Qu'est-ce que c'est ?
Le
Sprite Optimizer est un outil permettant de générer le code Multi DrawStat optimisé d'une image. Une fois le programme exécuté, il n'y a plus qu'à copier-coller la sortie dans votre éditeur de programme (
BIDE par exemple).
Attention, le programme retourne une solution optimisée, qui peut ne pas être la solution optimale.
En pratique, la solution proposée est souvent très correcte. Si vous pensez pouvoir faire mieux,
n'hésitez pas !
L'outil est librement diffusé sous licence CeCILL 2.1.
Comment l'utiliser ?
Commencez par installer les dépendances puis récupérez l'outil depuis
le dépôt de code.
– Python 3 (n'oubliez pas de cocher l'option « ajouter Python et pip au chemin » sous Windows)
– argparse :
pip install argparse
– bresenham :
pip install bresenham
– pillow :
pip install pillow
Ensuite, le fonctionnement est le suivant (pour Windows, une manip plus simple
est dispo) :
# Affiche le code uniquement
python3 sprite-optimizer image.png
# Affiche la progression, des infos (lignes, temps d'exécution), et le code
python3 sprite-optimizer -pi image.png
# Retourne le code de l'image pour un ViewWindow inversé (origine en bas à gauche)
python3 sprite-optimizer --flip image.png
# Retourne le code avec un offset de (10, 5)
python3 sprite-optmizer --offset 10 5 image.png
# Affiche l'aide intégrée
python3 sprite-optimizer -h
Le programme possède un shebang pour une exécution plus simple sous Linux :
./sprite-optimizer
Par défaut, l'origine des coordonnées
(0, 0) est en haut à gauche. Cela correspond à un
ViewWindow 0, 126, 0, 62, 0, 0. Pour inverser le ViewWindow utilisez l'option
--flip (ou
-f). Pour le décaler, utilisez l'option
--offset (ou
-o).
Options disponibles
usage: sprite-optimizer.py [-h] [-d] [-f] [-i] [-o OFFSET OFFSET] [-p] [-s]
path
Generate the Multi DrawStat code for an image.
positional arguments:
path path of the image to process
optional arguments:
-h, --help show this help message and exit
-d, --draw draw the result into a new file
-f, --flip flip image vertically (for inverted ViewWindow)
-i, --info print informative stats
-o OFFSET OFFSET, --offset OFFSET OFFSET
offset for viewwindow. Default: (0, 0)
-p, --progress print progress info
-s, --show show the result
Exemple de sortie
sprite.png processed in 71 lines (0.622s)
Graph(X,Y)=({16+14T, 7, 11, 5, 17+6T, 14+8T, T, 31, 20-6T, 8+2T, 11+10T, 26-T, 6+6T, 17-6T, 9+T, 7-7T, 27-9T, 29-5T, 4, 4+8T, 26+4T, 2T, 16+5T, 18-T, 28+3T, 23-3T, 13+3T, 11-3T, 6+4T, 7+5T, 15-5T, 22+2T, 22, 16+2T, 12+T, 14-T, 15-2T, 5+T, 2T, 1+T, 29-3T, 25+4T, 21+4T, 19+4T, 25-2T, 6+T, 26-5T, 8+T, 11+T, 25+T, 14+2T, 16-2T, 15-2T, 11+2T, 2T, 2T, 22+3T, 4-3T, 26-4T, 14-4T, 19-2T, 20-7T, 30, 29, 24, 21, 19, 17, 14, 14, 1}, {26-T, 21-11T, 21-10T, 20-9T, 24-8T, 2+T, 11+8T, 11+7T, 15+7T, 14+7T, 25+2T, 13-6T, 23, 11-6T, 11+6T, 6+5T, 27-2T, 21, 15+5T, 22-3T, 7+3T, 28-4T, 28-6T, 13+6T, 25-8T, 14+3T, 13+2T, 8, 10, 6, 24+2T, 20-T, 11-2T, 5+2T, 30-2T, 20+2T, 12+2T, 28-2T, 26+2T, 11+2T, 18+3T, 26-4T, 17-2T, 22+4T, 8-4T, 16+5T, 28-6T, 14+7T, 12+8T, 21-2T, 16-T, 5, 12, 8+2T, 15, 13-T, 27-3T, 22-3T, 14+3T, 2+4T, 17-6T, 25+T, 26, 20, 29, 29, 7, 29, 28, 19, 29})
Pour toute demande d'aide, suggestion ou remarque, vous pouvez commenter ce topic
Fichier joint
Citer : Posté le 19/08/2018 16:41 | #
Bien joué ! Il ne manquait plus que ce topic. Je sens qu'il va se faire linker souvent !
Citer : Posté le 21/08/2018 14:12 | #
Merci pour le bon boulot et l'article DS !
Le sprite d'exemple fait tellement peur...
La Planète Casio est accueillante : n'hésite pas à t'inscrire pour laisser un message ou partager tes créations !
Citer : Posté le 21/08/2018 14:21 | # | Fichier joint
D'ailleurs, j'ai trouvé la faille de l'algo : si le remplissage se fait à peu près qu'avec des lignes de même longueur, il a du mal à choisir le cas le plus optimal. Exemple :
D'où l'intérêt de vérifier le résultat à la main pour corriger ce genre de défauts. Mais dans la pratique ça n'arrive que rarement, donc c'est à relativiser, surtout par rapport à la qualité des anciens algos générateurs de Drawstat
Citer : Posté le 21/08/2018 15:30 | #
Super ce que tu as fait Dark Storm !
Je suis impressionné par la vitesse à laquelle tu as pondu ça
Ça fait un outil de plus pour nous simplifier la vie
Citer : Posté le 21/08/2018 16:02 | #
Super ! C'est une bonne chose de faite !
Merci pour le bon boulot et l'article DS !
Le sprite d'exemple fait tellement peur...
Oh, mais non, il est si mignon ! :3
Citer : Posté le 23/08/2018 21:01 | # | Fichier joint
Manuel d'utilisation pour Windows
1. Téléchargement
Téléchargez le fichier zip puis décompressez-le quelque part.
2. Installation de Python
Téléchargez Python 3 depuis le site officiel.
Lancez l'installation. Cochez la case « Add Python 3.7 to PATH ». Cliquez sur « Customize installation ». Vérifiez que la case « pip » est cochée. Le reste n'a que peu d'importance.
3. Installation des dépendances
Dans le dossier que vous avez décompressé, clic-droit sur install.bat puis « Exécuter en tant qu'administrateur ».
4. Utilisation
Placez les images à convertir dans le dossier du Sprite Optimizer.
Glissez-déposez un par un les fichiers JPEG ou PNG à convertir sur launcher.bat. Le script se lance. Une fois fini, le code est disponible dans le fichier output.txt.
Vous pouvez coller le code dans FA-124, BIDE, etc.
En cas d'avertissement : il se peut que Windows râle comme quoi le fichier n'est pas de source fiable. Si vous me faites confiance, vous pouvez outrepasser le message d'alerte (« Plus d'informations » → « Exécuter quand même » sous Windows 10).
Attention ! FA-124 coupe les lignes trop longues dans l'éditeur. Vérifiez que tout a bien été pris en compte, et coupez à la main si nécessaire. Je vous conseille d'utiliser BIDE pour éviter ces désagréments.
Citer : Posté le 24/08/2018 00:01 | #
Ah c'est pratique ça bien vu
Citer : Posté le 24/08/2018 00:29 | #
Je ferai peut-être un installateur, dans le même genre.
Ajouté le 24/08/2018 à 19:35 :
J'ai mis à jour le commentaire.
Est-ce que quelqu'un sous Windows peut me dire si les instructions sont claires et fonctionnelles ?
J'ai testé de mon coté, mais vu que j'ai déjà une installation de Python fonctionnelle, je préfère avoir le retour d'un testeur neutre.
Citer : Posté le 25/08/2018 13:03 | #
J'aurais testé volontiers si mon ordi personnel était encore en vie, cet enfoiré, puisque de toute façon j'aurai besoin de Python 3.
Citer : Posté le 28/08/2018 14:46 | #
Je peux tester la manip sous Windows, mon installation de python ayant été faite avec
spyderAnaconda, c'est le moment de refaire ça proprement sans installer plein de truc qui ne me servent jamaisAjouté le 28/08/2018 à 15:55 :
J'en suis a la phase de test, et pour l'instant tout semble fonctionner. J'ai eu un doute quand tu as mis un lien direct vers l’exécutable, était-ce pour la version 32 ou 64 bits ? Il semble que c'est la 32, donc pas de soucis (bien que certaine personne préféreraient sans doute pouvoir profiter de la version 64 bits si possible, si c'est juste pour ce script, ça ne change pas grand-chose et complexifierait le tutoriel)
En tout cas, tu as vraiment bien simplifié le processus à l'aide des fichiers BAT, donc je pense que ça devrait être bon pour tout le monde (la seule façon de faire mieux serait une vidéo, si quelqu’un veut s'y mettre )
Ajouté le 28/08/2018 à 17:08 :
J'ai trouvé un problème, chez moi il est impossible de copier du texte depuis la console Windows, ce qui est problématique pour récupérer le résultat.
Citer : Posté le 28/08/2018 17:14 | #
Tu as bien sélectionner puis fais clic droit, et non essayé de faire Ctrl+C ?
Citer : Posté le 28/08/2018 17:16 | #
je ne peux même pas selectionner quelque chose
Ajouté le 28/08/2018 à 17:19 :
nop, c'est bon.
Sous Windows Seven, faut faire clic droit -> sélectionner pour être autoriser à sélectionner du texte, puis Ctrl+C pour copier le texte sélectionné.
Citer : Posté le 28/08/2018 17:20 | #
Précision : sous Windows 7. La console standard de Windows 10 a beaucoup changé.
Citer : Posté le 28/08/2018 17:56 | #
Ca marche moyen et c'est un peu compliquer à faire, donc j'ai rajouter à l'arrache ces deux lignes en fin de fichier
f.write(code)
Citer : Posté le 28/08/2018 19:19 | #
Ok. Je modifie le .bat pour ne pas avoir à changer le script Python. En effet, j'ai testé sous W10, j'ai pas autre chose
Concernant la version de Python, j'ai pris celle que propose par défaut le site officiel quand on est loggué sous W10. Donc je sais pas si c'est la 64 ou 32…
Merci pour le retour
Ajouté le 28/08/2018 à 19:48 :
J'ai mis à jour le zip et la procédure, tu peux vérifier que tout fonctionne ?
Je mets à jour le script sur la forge (ajout de l'option --export FILE) dès que je boot sous Gnunux.
Citer : Posté le 29/08/2018 13:47 | #
je peux me tromper, mais j'ai l'impression que le zip est le même qu'avant.
Citer : Posté le 29/08/2018 13:51 | #
En effet, je sais pas ce que j'ai foutu, c'est louche. Je corrige ce soir.
Ajouté le 29/08/2018 à 21:48 :
Done.
Citer : Posté le 02/09/2018 21:14 | # | Fichier joint
Tout est bien écrit dans le fichier, il faut encore que je mette ça sur calculatrice.
En revanche, j'ai également des messages d'avertissement sous Windows7
Citer : Posté le 02/09/2018 21:16 | #
Nice \o/
Citer : Posté le 02/09/2018 21:56 | #
Je viens de tester, ça marche (bon mon sprite est à 180° en bas a gauche, mais c'est probablement moi qui ai foiré mon ViewWindow)