牛逼的AA:ASCII-Art


也许你还不知道AA是什么,但只看那牛逼哄哄的名字,就该知道它绝非善类。

没错。进入这个项目的主页:http://aa-project.sourceforge.net/ ,就能看到它的三个宏伟目标:

1.将所有的重要软件移植到AA-lib

2.将AA-lib移植到所有的可用平台

3.迫使IBM重新制造MDA卡

注:MDA(Monochrome Display Adapter ),单色字符显示适配卡,与单色字符显示器配接,它只支持字符显示功能,无图形功能,是一种相当古老的显卡。

如果你对技术不感兴趣,可用点击这里http://v.youku.com/v_show/id_XMzYwNTIyODY4.html,观看利用AA制作的一段动画,制作方法和源代码在文档的最后一节。 

简单的说,它可用实现下面的效果,就是将图片转换为ASCII文本。


这个略显粗糙,如果将字体调小,增大分辨率,可显示更加逼真的图片,例如:


其实,这是一个由ASCII字符的狂热爱好者们开发的项目,最初的发起人叫Jan Hubicka,目的是将计算机上的一切都用ASCII字符来表现,包括图形和视频。

该项目提供了一个库——AA-lib,这是一个低级图形库,与其他的库的区别是它不需要图形设备,完全用ASCII字符描绘图形,它的API被设计得与其他库类似。还提提供一个演示程序——BB(这个名字更显另类),播放了一段完全由ASCII字符绘制的动画,其中有文字,图像,分形几何,还有一个3D效果。

下面在fedora12中安装它们。


1.安装AA-lib

下载aalib-1.2:

http://prdownloads.sourceforge.net/aa-project/aalib-1.2.tar.gz

最新版本是1.4,但是BB是基于1.2的,所有先安装1.2。

解压、编译、安装:

tar  xvzf aalib-1.2.tar.gz
cd  aalib-1.2
./configure
make
make install

默认安装在/usr/local下


2.安装bb

下载bb-1.2:

http://prdownloads.sourceforge.net/aa-project/bb-1.2.tar.gz

编译前需要设置一个环境变量,否则会找不到aa-lib:

export CFLAGS=-I/usr/local/include

解压:

tar xvzf bb-1.2.tar.gz
cd aalib-1.2

编译时会报textform.c文件的错误,是因为该文件内定义的某些字符串太长,换行时没有用反斜杠,可以在后面加上反斜杠,或直接注释掉。然后编译:

./configure
make

编译生成了可执行文件bb,直接执行即可看到一段演示。最好在文本模式下执行,否则可能会报错。

这段演示还可以添加音乐,在源码的mikunix目录下有音频的程序,直接make,然后执行strip ../bb_snd_server。但是我一直没有弄出声音,也许是虚拟机的问题。


3.安装aview

aview的作用是将pnm格式的图片转换为ASCII文本,并显示。aview只支持pnm、pgm、pbm和ppm格式的图片,所以需要将其他格式的图片转换,它提供了一个asciiview的脚本,利用convert转换图片格式,然后再传递给aview。

aview依赖于aalib-1.4,所有要先用1.4替换之前安装的1.2,安装方法与1.2相同。安装后下载aview:

http://prdownloads.sourceforge.net/aa-project/aview-1.3.0rc1.tar.gz

解压、编译、安装:

tar xvzf aview-1.3.0rc1.tar.gz
cd  aview-1.3.0
./configure
make
make install

编译生成的aview程序可以将pbm、pgm或pnm图片用ASCII字符显示。但是不支持JPEG图片,所以它提供了一个shell脚本asciiview,先调用convert将JPEG图片转换为pgm图片,然后再用aview显示。

fedora12中没有convert命令,先用下面的命令安装:

yum  install  ImageMagick

准备一张图片,例如1.jpg,用下面的命令就可以把它转换为ASCII文本:

asciiview  1.jpg


4.Bad Apple

下面参考aview的源码,编写了一个程序,在Linux的终端下播放一段由ASCII字符绘制的动画:Bad Apple。原理比较简单,就是将视频逐帧截图,然后用程序按一定的时间间隔将图片依次转换为ASCII文本在终端上显示。动画视频在这里:http://v.youku.com/v_show/id_XMzYwNTIyODY4.html,动画中的卡顿是屏幕录像软件的问题,AA-lib本身是很流畅的。

制作步骤:

准备apple.flv,用kmplayer做每50毫秒截图,截图为jpeg格式,把它们都复制到/root/aa/img目录下。

用下面shell脚本将jpeg图片转化为pgm格式,共3202张,文件名为1.pgm到3202.pgm,全部放在pgm文件夹下。

#!/bin/sh
ls -l *.jpg > sort
i=1
while [ $i -le 3202 ]
do
    filename=`sed -n ''$i'p' sort | awk '{print $8}'`
    echo $filename
    convert $filename ./pgm/$i.pgm
    i=`expr $i + 1`
done

在pgm文件夹下执行程序:

./aviewdemo -contrast 20 -extended 1.pgm

程序源码在这里:http://download.csdn.net/detail/exbob/4112093 

动画视频在这里:http://v.youku.com/v_show/id_XMzYwNTIyODY4.html 


阅读终点,创作起航,您可以撰写心得或摘录文章要点写篇博文。去创作
  • 8
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
### 回答1: "syntaxerror: non-ascii character" 意思是程序中出现了非 ASCII 字符,导致程序无法正常运行。可能是编码问题或者是在程序中使用了非法字符。建议检查程序代码,确保所有字符都是有效的 ASCII 字符。 ### 回答2: 在计算机编程中,syntaxerror: non-ascii character是一种错误提示,它表示代码中存在非ASCII字符,这些字符不属于标准ASCII编码字符集。对于大多数计算机系统,ASCII编码只包含128个字符,包括数字、字母、标点符号和控制字符等。因此,如果代码中包含超出ASCII字符集范围的字符,就会触发“syntaxerror: non-ascii character”的错误提示。 这种错误通常出现在需要使用非英语字符的情况下,例如在中文、日语、俄语等语言的编程中。在这些语言中,可能需要使用Unicode字符编码来表示非常规字符,例如中文汉字或日本假名。如果在代码中使用了这些字符,就会导致“syntaxerror: non-ascii character”的错误提示。 为了解决这个问题,程序员可以采取多种方法。一种方法是使用ASCII编码字符替换非ASCII字符,例如用拼音代替中文汉字。但这种方法会使代码可读性降低,影响代码的质量。另一种方法是使用特殊的编程语言或库来处理非ASCII字符,例如Python的unicode_literals模块,可以让Python代码支持Unicode编码字符。 总的来说,syntaxerror: non-ascii character是一种常见的编程错误,但它可以通过使用特殊编程语言或库来解决。程序员在编写代码时应该注意使用正确的字符编码,这样可以保证代码的可读性和可维护性。 ### 回答3: SyntaxError: Non-ASCII character是Python中的一个错误类型,通常会在代码中使用了非ASCII字符时出现。ASCII是一种字符编码标准,只包含128个字符,包括字母、数字和特殊字符。因此,在Python程序中使用非ASCII字符(如中文字符、日语字符等)时,需要使用其他编码标准,如UTF-8。 解决这个问题的方法有以下三种: 1. 在代码中使用ASCII字符 如果代码不需要使用非ASCII字符,那么最简单的方法是使用ASCII字符编写代码。这样,就可以避免出现SyntaxError: Non-ASCII character这个错误。 2. 在代码文件头添加编码声明 如果代码需要使用非ASCII字符,那么需要在代码文件头添加编码声明。例如,在使用中文字符时,可以在代码文件的第一行添加如下声明: # -*- coding: utf-8 -*- 这个声明告诉Python解释器,这个文件使用UTF-8编码。 3. 在代码中使用转义字符 另一种方法是在使用非ASCII字符时,使用转义字符。例如,如果需要在代码中使用中文字符“你好”,可以使用转义字符表示为“\u4f60\u597d”。 总之,避免SyntaxError: Non-ASCII character的最好方法是在编写代码时尽量使用ASCII字符,如果需要使用非ASCII字符,需要在代码文件头添加编码声明或者使用转义字符。这样,就可以避免这个错误,并确保代码可以正确执行。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

exbob

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值