標籤:

程序列印字元畫?

我知道的一種列印字元畫的原理是,分析圖片的像素和灰度,然後用字元加以替換。

但是上面這個我感覺明顯不是,如果只用print一類的格式化輸出,基本不可能吧?難道是用photoshop一類的圖形工具,寫字,然後處理圖片像素替換字元嗎?

有朋友知道,這樣的"字元畫"是怎麼列印出來的嗎?不要光說有什麼樣的類庫可疑實現,也要說說類庫實現的原理...謝謝!


我覺得就跟題主所說一樣,用photoshop一個一個像素點出來,然後用對應的程序轉換出來。

首先創建一個圖片,可以按照你想要的圖片進行直接的,每個像素點的填充。這裡我就為了省事,直接創建了一張以字體填充的圖片:

要求圖片大小不要太大。接著進行圖片到字元的轉換:拖進MATLAB

效果就出來了。雖然和題主的要求不太一樣,但是經過稍微的修改就能達成題主的要求。

-----------------------------------------------我是昏割線-----------------------------------------------------------

原理其實很簡單,直接用matlab就能夠實現。

首先,存儲在電腦上的圖片一般是保存為RGB三色的幾張圖。可以看作是三張二維的表,每個表分別保存每個像素位置的R、G、B的值的大小。

但是字元效果只能用黑-灰-白色的啊,那麼就需要將這張彩色照片轉換成灰度圖像。

不過一般電腦中使用的圖像都是從黑到白分成256種,表示為0~255。比上圖分的更加仔細。

在matlab中可以使用reb2gray將彩色的圖像轉換為灰度圖像。其轉換公式為:

gray = 0.29900 	imes R + 0.58700	imes  G + 0.11400 	imes B

其中R、G、B為紅、綠、藍的色階,通常來說也是0~255的整數。(公式來自RGB2GRAY原理 - - 博客頻道 - CSDN.NET)

轉換完的圖像就是灰度圖像了,只剩下一張表了,就可以用字元的視覺灰度來進行逐個像素的轉換了。這裡我使用以下的字符集:

$@B%8WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/|()1{}[]?-_+~&<&>i!lI;:,"^`".

表示從黑到白的各種顏色。雖然不足255個,但是可以通過近似的方法來求,就是將灰度色階劃分為多個色段,依次對比,對號入座就可以了。

接下來點點滑鼠就可以了,自動生成輸出的字元畫文件。找個顯示等寬字體的文本編輯器就可以了。記事本就可以。不過我這裡使用的是notepad++。

程序基礎的原理就是這樣。你甚至可以進行表情包的轉換。

原圖:

轉換圖(略大):

................".............."..."".........................
......................_zOBB@WpC{...".........................
................"..uWWf&<:."...,!(W@X.""....................... ................,OB{....."........._kh:....................... ............"..t@~"..................:Wz.""................... ........""..."1..`"................"""(B..................... ..........."!@`...""................".,.:@"................... .........."~W""......"..................,,@................... ..........&

(字元長度不夠,我把圖壓縮成原來的0.5倍,可能壓縮的太厲害了。。。。)

甚至說是川普:

脫下眼鏡更高清啊(技術處理過,不要吐槽):

------------------------------------------------------我是昏割線-----------------------------------------------------------

話說有個視頻顯示解碼組件可以實現播放視頻直接轉換成會動的字元畫:libcaca(cacalabs/libcaca)效果炸裂,可以脫下眼鏡觀看。(或直接下載mplayer 加選項-vo caca就可以實現這種炸裂的效果)

原理很簡單,用matlab或者python都可以實現。不過我一個學光的,代碼肯定是碼不好了。即使這樣,我寫matlab程序也只用了56行(用的內帶的函數,順手也實現了圖片的縮放)。題主完全可以自己試試看。

話說我第一次寫這麼長的答案啊,紀念一下。


推薦閱讀:

【修真院「純潔」系列之五】醉酒和加班
NVDIA GeForce Experience 3.0 強制賬戶登陸是出於怎樣的考慮?
黑客到底要身兼幾種計算機語言?
請問mysql「字元查詢」和「數字查詢「的效率問題?
【譯】注釋的藝術

TAG:程序 | 字元畫 |