這只是一個娛樂性的實現,純屬突發奇想。python
使用Emoji表情組成漢字或者簡筆畫,在微信、QQ的傳播中甚廣,就會想着要不本身也試着作出來吧.git
好比下圖:程序員
一開始想到的實現方案就是: 首先將漢字轉化成白底黑字的圖片, 而後將圖片根據灰度值映射成不一樣的字符打印在終端。github
前者文字轉圖片,使用常見的繪圖庫很是好實現(好比python的PIL庫);
工做量無非只是實現過程當中慢慢調整排版, 以達到本身的預期效果.編程
後者則是簡單的映射關係而已: 將圖片中像素點的灰度值, 映射成某個字符; 在該實現中, 對於黑底白字的圖片只有兩個映射關係, 黑字對應要替換的Emoji字符, 白底對應空白.segmentfault
該部分的python實現代碼以下:微信
ascii_char = list('1234567890abcd ') # 任意多個字符,灰度值的映射區間 def select_ascii_char(r, g, b): ''' 在灰度圖像中,灰度值最高爲255,表明白色; 最低爲0,表明黑色 ''' # 把RGB轉爲灰度值,而且返回該灰度值對應的字符標記 # 'RGB-灰度值'轉換公式以下 gray = int((19595 * r + 38469 * g + 7472 * b) >> 16) # ascii_char中的一個字符所能表示的灰度值區間 unit = 256.0 / len(ascii_char) return ascii_char[int(gray/unit)]
select_ascii_char
就實現了將一個像素點映射成一個具體的自定義字符char.動畫
在本功能的實現中, ascii_char
更簡單, 只須要兩個字符便可: 一個任意給定, 一個是空格.編碼
所以將 ascii_char
換成 [u'❤️ ', u' ']
spa
因爲須要將圖片的像素點映射到可在終端打印的字符, 終端的顯示空間有限, 因此須要對圖片進行縮小調整.
zh2emoji
的代碼在個人github上有對應的代碼下載, 若是你有興趣,能夠fork後實現本身想要的更多自定義功能.
一個"茴"字我有N多種寫法:
print image2print(word2image(u'茴'), u'❤️ ') print image2print(word2image(u'茴'), u'茴', width=40)
輸出結果以下:
用😂 組成"哭"字:
基於zh2emoji,本身實現了一個可能有點兒用的擴展: demo_show_animation.py
.
它能夠將一句話在終端依次打印出來,使用你決定的Emoji或者其餘字符.
好比你試着執行 python ./demo_show_animation.py 喜歡就點個讚唄
, 將在終端執行一段展現文字的動畫, 展現的文字就是你剛纔輸入的話.
若是你可以堅持看到這裏, 不知道你有沒有想到一些有意思的玩法不? 歡迎一塊兒參與。編程是一種樂趣,代碼是將一些頭腦想法實現出來的媒介;程序員寫代碼,就比如做家寫寫文字,是一種習慣。
關於Emoji的更多知識介紹,能夠閱讀個人另外一篇正經的博客: Emoji的編碼以及常見問題的解決方法