Les membres ayant 30 points peuvent parler sur les canaux annonces, projets et hs du chat.

Forum Casio - Vos tutoriels et astuces


Index du Forum » Vos tutoriels et astuces » [Tutoriel] Utiliser le Sprite Optimizer
Dark storm En ligne Labélisateur Points: 11562 Défis: 176 Message

[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


Choukas Hors ligne Membre Points: 90 Défis: 5 Message

Citer : Posté le 19/02/2022 18:06 | #



L'algo de Lephenix a été merge dans le dépôt git non ? Pas besoin d'aller récup le script qu'il donne en pièce jointe après ?

Tituya a écrit :
Et au passage c'est optimisé au niveau de la vitesse de dessin. En utilisant ce qu'on appelle un le Super DrawStat

Yes mais pas forcément au niveau de la taille en octets du coup ?
Tituya Hors ligne Rédacteur Points: 1979 Défis: 16 Message

Citer : Posté le 19/02/2022 18:12 | #


En effet j'avais pas vu le dépôt. Après ça dépend de la taille de ton image, tu peux comparer avec l'image de 44*60 de Sentaro21 qui a pris environ 7 minutes à être calculée

Niveau octets je ne sais pas trop, vu que l'outil génère des lignes pour optimiser le dessin ça doit être relativement opti au niveau du poids. Il y a certainement moyen de trouver mieux cependant
Bretagne > Reste du globe
(Et de toute façon, vous pouvez pas dire l'inverse grâce à Bzh)
Projet en cours : Adoranda

Mes programmes
Hésite pas à faire un test !


Choukas Hors ligne Membre Points: 90 Défis: 5 Message

Citer : Posté le 19/02/2022 18:18 | #


Ça marche merci. J'ai utilisé une image de 127 par 63 (résolution d'une casio) mais avec peu de points, c'est peut-être pour ça que ça rame ? J'ai testé avec son image et l'exécution semblait prendre beaucoup de temps également :/
Lephenixnoir Hors ligne Administrateur Points: 22452 Défis: 149 Message

Citer : Posté le 19/02/2022 18:36 | #


Ma version a bien été mergée sur le dépôt. Elle n'optimise que la vitesse d'exécution et ne change pas le résultat (à part peut-être le non-déterminisme des ensembles Python). L'image d'exemple dans mon post original était upscale x2 ce qui change massivement le temps de calcul.
Choukas Hors ligne Membre Points: 90 Défis: 5 Message

Citer : Posté le 19/02/2022 18:38 | #


* Avec l'image de Dark storm je voulais dire
Hackcell Hors ligne Maître du Puzzle Points: 1467 Défis: 11 Message

Citer : Posté le 08/07/2022 10:37 | #


Verifie bien le nombre de pixel, ya deux trois images upscale par 10 sur le forum
Avensis Hors ligne Membre Points: 23 Défis: 0 Message

Citer : Posté le 16/07/2022 19:43 | #


ça marche pour moi aussi merci pour le partage !

SHAREit MX Player

LienAjouter une imageAjouter une vidéoAjouter un lien vers un profilAjouter du codeCiterAjouter un spoiler(texte affichable/masquable par un clic)Ajouter une barre de progressionItaliqueGrasSoulignéAfficher du texte barréCentréJustifiéPlus petitPlus grandPlus de smileys !
Cliquez pour épingler Cliquez pour détacher Cliquez pour fermer
Alignement de l'image: Redimensionnement de l'image (en pixel):
Afficher la liste des membres
:bow: :cool: :good: :love: ^^
:omg: :fusil: :aie: :argh: :mdr:
:boulet2: :thx: :champ: :whistle: :bounce:
valider
 :)  ;)  :D  :p
 :lol:  8)  :(  :@
 0_0  :oops:  :grr:  :E
 :O  :sry:  :mmm:  :waza:
 :'(  :here:  ^^  >:)

Σ π θ ± α β γ δ Δ σ λ
Veuillez donner la réponse en chiffre
Vous devez activer le Javascript dans votre navigateur pour pouvoir valider ce formulaire.

Si vous n'avez pas volontairement désactivé cette fonctionnalité de votre navigateur, il s'agit probablement d'un bug : contactez l'équipe de Planète Casio.

Planète Casio v42 © créé par Neuronix et Muelsaco 2004 - 2022 | Il y a 39 connectés | Nous contacter | Qui sommes-nous ? | Licences et remerciements

Planète Casio est un site communautaire non affilié à Casio. Toute reproduction de Planète Casio, même partielle, est interdite.
Les programmes et autres publications présentes sur Planète Casio restent la propriété de leurs auteurs et peuvent être soumis à des licences ou copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd