I would like to port this question to Python (Windows + Linux + Mac Os)
Thank you!
I would like to port this question to Python (Windows + Linux + Mac Os)
Thank you!
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')
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)