9

我想将此问题移植到 Python (Windows + Linux + Mac Os)

如何使用 C# 在 Windows 控制台应用程序中创建 ASCII 动画?

谢谢!

4

5 回答 5

12

我刚刚将我的示例与动画 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')
于 2010-05-07T01:13:58.817 回答
8

这正是我创建asciimatics的那种应用程序。

它是一个跨平台的控制台 API,支持从一组丰富的文本效果生成动画场景。它已被证明适用于各种风格的 CentOS 和 Windows 和 OSX。

可以从图库中获取可能的示例。这是一个类似于其他答案中提供的动画 GIF 代码的示例。

彩色图像

我假设您只是在寻找一种制作任何动画的方法,但如果您真的想复制蒸汽火车,您可以将其转换为 Sprite 并为其提供一条在屏幕上运行的路径,然后将其播放为场景的一部分。可以在文档中找到对象的完整说明。

于 2015-09-03T23:11:47.680 回答
3

简单的控制台动画,在 Ubuntu 的 python3 上测试。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. 为了别的事情而完全放弃诅咒。
于 2010-05-07T06:39:15.010 回答
2

颜色: http ://pypi.python.org/pypi/colorama

于 2010-05-05T04:49:09.250 回答
2

好吧,我设法将 Philip Daubmeier 的解决方案移植到了 python 3(并且还添加了颜色映射)。主要问题是 ord 函数,它需要被忽略,因为 Python 3 - 字节串索引直接返回 ASCII 值,而不是该位置的字符(参见此处此处..)。我创建了一个 Git 存储库,请随意贡献(希望有更好的性能-> pm 邀请):

回购https ://github.com/sebibek/gif2ascii

于 2020-04-21T13:50:44.737 回答