字符畫——從入門到不屑

今天我們來聊一聊字符畫。

字符畫這個話題,似乎早在貼吧時代就已經被玩爛瞭。在百度圖片隨便一搜索,就能夠看到非常多:

百度圖片搜索“字符畫”光是在線字符畫生成器就有很多

然後在這個時代,會編程的人越來越多(尤其是 MATLAB,Python 等非常適合圖像處理的腳本語言),類似的教程更是數不勝數。甚至可以說,在 2018 年還剩一個多月就要結束的時候還要搞一個這種基於 Python 的字符畫生成教學,實在是太丟人瞭,也幾乎沒有什麼意義。

在知乎搜索“字符畫”,也能夠找到一大堆現成的代碼

筆者最早接觸生成字符畫的代碼,可能是源自這個 B 站視頻(剛打開時候的音樂不太妙)。UP 主在 Vim 中寫下一行又一行的 C++ 代碼,看得那年剛上大學的我如癡如醉。

視頻中加瞭速的寫代碼過程配合BGM實在是帶感


那我們這次到底還要講點什麼?我的初步打算是這樣的:

  1. 對於代碼的構思及個別細節
  2. 大致講一講相關代碼的算法
  3. 在此基礎上還能再做些什麼

那麼我們就開始吧!


一 黑白字符畫

黑白字符畫應該是難度最低的瞭。大致思路是這樣的:

  1. 設計一個從深到淺(0~255,黑~白)的字符列表;
  2. 將原圖轉為黑白,並量化(quantization,如從 0~255 量化為 0~16)從而匹配字符列表的長度;
  3. 將圖片縮放為一個很小的圖(如寬度 100);
  4. 將每一個像素點的亮度轉為對應字符;
  5. 輸出為 .txt 文件。

然後隻要寫出對應的代碼,就可以看效果瞭。

黑白字符畫 效果圖

這裡有幾點需要註意。

第一,輸出的字符畫的字體要選擇等寬的。這裡我選擇的是 Courier New。

第二,要搞清楚所選字符的寬和高的關系。這裡我經過簡單測試,得出高大概是寬的 1.865 倍。(不同的屏幕 PPI,不同的字號,都可能會導致寬高比發生變動,因此最好在一開始就固定一個字號,如八號字)

第三,由淺到深的字符列表需要經過仔細調試,符合對應字體。這裡我設計的字符列表為:

@W#$OEXC[(/?=^~_.`

赞(0)