程序列印字元畫?
我知道的一種列印字元畫的原理是,分析圖片的像素和灰度,然後用字元加以替換。但是上面這個我感覺明顯不是,如果只用print一類的格式化輸出,基本不可能吧?難道是用photoshop一類的圖形工具,寫字,然後處理圖片像素替換字元嗎?有朋友知道,這樣的"字元畫"是怎麼列印出來的嗎?不要光說有什麼樣的類庫可疑實現,也要說說類庫實現的原理...謝謝!
我覺得就跟題主所說一樣,用photoshop一個一個像素點出來,然後用對應的程序轉換出來。首先創建一個圖片,可以按照你想要的圖片進行直接的,每個像素點的填充。這裡我就為了省事,直接創建了一張以字體填充的圖片:
要求圖片大小不要太大。接著進行圖片到字元的轉換:拖進MATLAB
效果就出來了。雖然和題主的要求不太一樣,但是經過稍微的修改就能達成題主的要求。-----------------------------------------------我是昏割線-----------------------------------------------------------原理其實很簡單,直接用matlab就能夠實現。首先,存儲在電腦上的圖片一般是保存為RGB三色的幾張圖。可以看作是三張二維的表,每個表分別保存每個像素位置的R、G、B的值的大小。
但是字元效果只能用黑-灰-白色的啊,那麼就需要將這張彩色照片轉換成灰度圖像。不過一般電腦中使用的圖像都是從黑到白分成256種,表示為0~255。比上圖分的更加仔細。在matlab中可以使用reb2gray將彩色的圖像轉換為灰度圖像。其轉換公式為:
其中R、G、B為紅、綠、藍的色階,通常來說也是0~255的整數。(公式來自RGB2GRAY原理 - - 博客頻道 - CSDN.NET)轉換完的圖像就是灰度圖像了,只剩下一張表了,就可以用字元的視覺灰度來進行逐個像素的轉換了。這裡我使用以下的字符集:$@B%8WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/|()1{}[]?-_+~&<&>i!lI;:,"^`".
表示從黑到白的各種顏色。雖然不足255個,但是可以通過近似的方法來求,就是將灰度色階劃分為多個色段,依次對比,對號入座就可以了。
接下來點點滑鼠就可以了,自動生成輸出的字元畫文件。找個顯示等寬字體的文本編輯器就可以了。記事本就可以。不過我這裡使用的是notepad++。程序基礎的原理就是這樣。你甚至可以進行表情包的轉換。原圖:轉換圖(略大):(字元長度不夠,我把圖壓縮成原來的0.5倍,可能壓縮的太厲害了。。。。)................".............."..."".........................
......................_zOBB@WpC{...".........................
................"..uWWf&<:."...,!(W@X."".......................
................,OB{....."........._kh:.......................
............"..t@~"..................:Wz.""...................
........""..."1..`"................"""(B.....................
..........."!@`...""................".,.:@"...................
.........."~W""......"..................,,@...................
..........&
原理很簡單,用matlab或者python都可以實現。不過我一個學光的,代碼肯定是碼不好了。即使這樣,我寫matlab程序也只用了56行(用的內帶的函數,順手也實現了圖片的縮放)。題主完全可以自己試試看。
話說我第一次寫這麼長的答案啊,紀念一下。推薦閱讀:
※【修真院「純潔」系列之五】醉酒和加班
※NVDIA GeForce Experience 3.0 強制賬戶登陸是出於怎樣的考慮?
※黑客到底要身兼幾種計算機語言?
※請問mysql「字元查詢」和「數字查詢「的效率問題?
※【譯】注釋的藝術