How to create ASCII animation in a console application using Python 3.x?

社会主义新天地 提交于 2019-11-30 05:44:24
Philip Daubmeier

I just ported my example with the animated gif to ASCII animation from my answer here to python. You will need to install the pyglet library from here, as python unfortunately has no built-in animated-gif support. Hope you like it :)

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') 

This is precisely the sort of application that I created asciimatics for.

It is a cross-platform console API with support for generating animated scenes from a rich set of text effects. It has been proved to work on various flavours of CentOS and Windows and OSX.

Samples of what is possible are available from the gallery. Here's a sample similar to the animated GIF code provided in other answers.

I assume you're just looking for a way to do any animation, but if you really wanted to replicate the steam train, you could convert it to a Sprite and give it a Path that just runs it across the Screen, then play it as part of a Scene. Full explanations of the objects can be found in the docs.

Simple console animation, tested on python3 in Ubuntu. addch() doesn't like that non-ascii character, but it works in 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: I've tested this under Windoze and it doesn't work :(. There's three basic options going forward: (please choose)

  1. Install a third-party windows-curses library (http://adamv.com/dev/python/curses/)
  2. Apply a windows-curses patch to python (http://bugs.python.org/msg94309)
  3. Abandon curses altogether for something else.
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!