牛逼的AA:ASCII-Art
也許你還不知道AA是什麼,但只看那牛逼哄哄的名字,就該知道它絕非善類。
1.將所有的重要軟體移植到AA-lib
2.將AA-lib移植到所有的可用平臺
3.迫使IBM重新制造MDA卡
注:MDA(Monochrome Display Adapter ),單色字元顯示適配卡,與單色字元顯示器配接,它只支援字元顯示功能,無圖形功能,是一種相當古老的顯示卡。
簡單的說,它可用實現下面的效果,就是將圖片轉換為ASCII文字。
這個略顯粗糙,如果將字型調小,增大解析度,可顯示更加逼真的圖片,例如:
其實,這是一個由ASCII字元的狂熱愛好者們開發的專案,最初的發起人叫Jan Hubicka,目的是將計算機上的一切都用ASCII字元來表現,包括圖形和視訊。
該專案提供了一個庫——AA-lib,這是一個低階圖形庫,與其他的庫的區別是它不需要圖形裝置,完全用ASCII字元描繪圖形,它的API被設計得與其他庫類似。還提提供一個演示程式——BB(這個名字更顯另類),播放了一段完全由ASCII字元繪製的動畫,其中有文字,影象,分形幾何,還有一個3D效果。
下面在fedora12中安裝它們。
1.安裝AA-lib
下載aalib-1.2:
最新版本是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:
編譯前需要設定一個環境變數,否則會找不到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:
解壓、編譯、安裝:
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