9
votes

Comment créer une animation ASCII dans une application de console à l'aide de Python 3.x?

Je voudrais porter cette question à Python (Windows + Linux + Mac OS)

Comment créer une animation ASCII dans Windows Application de la console utilisant C #?

Merci!


0 commentaires

5 Réponses :


2
votes

1 commentaires

-1 Pour afficher un seul lien comme réponse à une question avec 100 primes.



12
votes

Je viens de porter mon exemple avec le gif animé à l'animation ASCII à partir de ma réponse ici à Python. Vous devrez installer la bibliothèque Pyglet à partir de ici , car Python n'a malheureusement pas d'animation intégrée -Gif support. J'espère que vous l'aimez :)

import pyglet, sys, os, time

def animgif_to_ASCII_animation(animated_gif_path):
    # map greyscale to characters
    chars = ('#', '#', '@', '%', '=', '+', '*', ':', '-', '.', ' ')
    clear_console = 'clear' if os.name == 'posix' else 'CLS'

    # load image
    anim = pyglet.image.load_animation(animated_gif_path)

    # Step through forever, frame by frame
    while True:
        for frame in anim.frames:

            # Gets a list of luminance ('L') values of the current frame
            data = frame.image.get_data('L', frame.image.width)

            # Built up the string, by translating luminance values to characters
            outstr = ''
            for (i, pixel) in enumerate(data):
                outstr += chars[(ord(pixel) * (len(chars) - 1)) / 255] + \
                          ('\n' if (i + 1) % frame.image.width == 0 else '')

            # Clear the console
            os.system(clear_console)

            # Write the current frame on stdout and sleep
            sys.stdout.write(outstr)
            sys.stdout.flush()
            time.sleep(0.1)

# run the animation based on some animated gif
animgif_to_ASCII_animation(u'C:\\some_animated_gif.gif')


2 commentaires

Je n'ai pas testé avec Python 3.x, n'a que 2,6 sur mon PC. Si quelqu'un pouvait tester cela sur 3.x: serait formidable.


J'ai essayé cela sur Python 3.5.2, mais malheureusement compilateur indique qu'il existe une erreur comme celle-ci: TypeError: ORD () String attendue de longueur 1, mais Int trouvé. Certaines des réponses dans les États indiquent que la fonction ORD () doit être supprimée. Mais lorsque vous l'avez fait, cela se brise également de la même ligne que: TypeError: les indices de tuple doivent être des entiers ou des tranches, pas flottant. Je crois donc que j'ai besoin de quelqu'un pour tester cela aussi :)



3
votes

Animation de console simple, testée sur Python3 à Ubuntu. addch () n'aime pas ce caractère non-ASCII, mais cela fonctionne dans addstr ().

#this comment is needed in windows:
#  encoding=latin-1
def curses(win):
    from curses import use_default_colors, napms, curs_set
    use_default_colors()
    win.border()
    curs_set(0)

    row, col = win.getmaxyx()
    anim = '.-+^°*'
    y = int(row / 2)
    x = int((col - len(anim))/2)
    while True:
        for i in range(6):
            win.addstr(y, x+i, anim[i:i+1])
            win.refresh()
            napms(100)
            win.addch(y, x+i, ' ')

if __name__ == "__main__":
    from curses import wrapper
    wrapper(curses)


2 commentaires

Avez-vous installé Pyglet? Quel message d'erreur s'est-il apparu? Je l'ai testé comme je l'ai dit sous Windows avec Python 2.6 et CMD Console et cela a fonctionné.


BTW: Vous n'avez pas nécessairement besoin d'utiliser des malédictions, comme vous voyez dans ma réponse.



8
votes

Ceci est précisément le genre d'application que j'ai créé asciimatics pour.

Il s'agit d'une API de console multiplate-forme avec support pour générer des scènes animées d'un ensemble riche d'effets de texte. Il a été prouvé qu'il fonctionne sur diverses saveurs de Centos et Windows et OSX.

Des échantillons de ce qui est possible sont disponibles auprès du Galerie . Voici un exemple similaire au code GIF animé fourni dans d'autres réponses.

images couleur

Je suppose que vous recherchez simplement une façon de faire une animation, mais si vous vouliez vraiment reproduire le train à vapeur, vous pouvez le convertir en sprite et lui donner un chemin qui l'exécute simplement sur l'écran, puis Jouez-le dans le cadre d'une scène. Les explications complètes des objets peuvent être trouvées dans le Docs .


0 commentaires

2
votes

Eh bien, j'ai réussi à porter la solution de Port Philip Daubmeier à Python 3 (et a également ajouté la mappage de couleurs). Le principal problème était la fonction ORD, qui devait être laissée de côté, car Python 3 - bytestring Indexing renvoie directement la valeur ASCII, au lieu du caractère à cette position (voir ici et ici ..). J'ai créé un repo git, n'hésitez pas à contribuer (meilleure performance serait souhaitable-> pm pour l'invitation):

repo : https://github.com/sebibek/gif2asciiiIa


0 commentaires