Как создать анимацию ASCII в консольном приложении с помощью Python 3.x?

Я хотел бы перенести этот вопрос на Python (Windows + Linux + Mac Os)

Как создать анимацию ASCII в приложении Windows Console с помощью C #?

Спасибо!


person Hamish Grubijan    schedule 28.04.2010    source источник


Ответы (5)


Я только что перенес свой пример с анимированным 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')
person Philip Daubmeier    schedule 07.05.2010
comment
Не тестировал его на python 3.x, на моем ПК получил только 2.6. Если бы кто-нибудь мог проверить это на 3.x: было бы здорово. - person Philip Daubmeier; 07.05.2010
comment
Я пробовал это на python 3.5.2, но, к сожалению, компилятор сообщает, что есть такая ошибка: TypeError: ord () ожидаемая строка длины 1, но найдено int. В некоторых ответах в SO говорится, что функцию ord () следует удалить. но когда вы это сделаете, он также прерывается из той же строки, что и: TypeError: индексы кортежа должны быть целыми числами или срезами, а не с плавающей точкой. Так что я считаю, что мне тоже нужен кто-то, чтобы это проверить :) - person Prometheus; 20.01.2017

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

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

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

Цветные изображения< / а>

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

person Peter Brittain    schedule 03.09.2015

Простая консольная анимация, протестированная на 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. Полностью отказаться от проклятий ради чего-нибудь другого.
person bukzor    schedule 07.05.2010
comment
ты установил пиглет? Какое сообщение об ошибке появилось? Я тестировал это, как я уже сказал, на Windows с консолью python 2.6 и cmd, и это сработало. - person Philip Daubmeier; 07.05.2010
comment
Кстати: вам не обязательно использовать проклятия, как вы видите в моем ответе. - person Philip Daubmeier; 07.05.2010

Colorama: http://pypi.python.org/pypi/colorama

person ja.    schedule 05.05.2010
comment
-1 за публикацию одной ссылки в качестве ответа на вопрос со 100 наградой. - person Adam; 07.05.2010

Что ж, мне удалось перенести решение Филипа Добмейера на python 3 (а также добавил к нему цветовое отображение). Основной проблемой была функция ord, которую нужно было исключить, поскольку индексирование строки байтов в Python 3 возвращает значение ASCII напрямую, а не символ в этой позиции (см. здесь и здесь ..). Я создал репозиторий Git, не стесняйтесь вносить свой вклад (желательна лучшая производительность -> pm для приглашения):

репо: https://github.com/sebibek/gif2ascii

person seebi    schedule 21.04.2020