Как создать анимацию ASCII в консольном приложении, используя Python 3.x? - PullRequest
5 голосов

Ответы [ 4 ]

11 голосов
/ 07 мая 2010

Я только что перенес свой пример с анимированным gif в ASCII-анимацию из моего ответа здесь на python. Вам нужно будет установить библиотеку pyglet из здесь , так как, к сожалению, в python нет встроенной поддержки анимированных gif. Надеюсь, вам понравится :)

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')
5 голосов
/ 04 сентября 2015

Это именно то приложение, которое я создал asciimatics для.

Это API-интерфейс кроссплатформенной консоли с поддержкой создания анимированных сцен из богатого набора текстовых эффектов. Доказано, что он работает с различными версиями CentOS, Windows и OSX.

Образцы того, что возможно, доступны из галереи . Вот пример, похожий на анимированный GIF-код, приведенный в других ответах.

Colour images

Полагаю, вы просто ищете способ создания любой анимации, но если вы действительно хотите скопировать паровоз, вы можете преобразовать его в спрайт и указать ему путь, который просто проходит по экрану, а затем играть как часть сцены. Полные объяснения объектов можно найти в документах .

3 голосов
/ 07 мая 2010

Простая консольная анимация, протестированная на python3 в Ubuntu. addch () не нравится этот не-ascii символ, но он работает в 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)

@ Philip Daubmeier: Я тестировал это под Windoze, и оно не работает :(. В будущем есть три основных варианта:

  1. Установка сторонней библиотеки windows-curses (http://adamv.com/dev/python/curses/)
  2. Применить патч Windows-Curses к Python (http://bugs.python.org/msg94309)
  3. Откажись от всех проклятий за что-то еще.
2 голосов
/ 05 мая 2010
...