使用emoji表情組成漢字或簡筆畫,在微信、QQ的傳播中甚廣,就會想著要不自己也試著做出來吧.
比如下圖:
一開始想到的實現方案是: 首先將漢字轉換成白底黑字的圖片, 然後將圖片根據灰階值映射成不同的字元印在終端機上。
前者文字轉圖片,使用常見的繪圖庫非常好實現(比如python的PIL庫);工作量無非只是實現過程中慢慢調整排版, 以達到自己的預期效果.
後者則是簡單的映射關係而已: 將圖片中像素點的灰階值, 映射成某個字元; 在該實現中, 對於黑底白字的圖片只有兩個映射關係,黑字對應要替換的emoji字元, 白底對應空白.
該部分的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' ']
由於需要將圖片的像素點映射到可在終端的顯示空間有限, 所以需要對圖片進行縮小調整.
zh2emoji的代碼在我的github上有對應的代碼下載, 如果你有興趣,可以fork後實現自己想要的更多自定義功能.
展示
一個" Hayes"字我有N多種寫法:
print image2print(word2image(u'茴'), u'❤️ ') print image2print(word2image(u'茴'), u'W ') print image2print(word2image(u'茴'), u'茴', width=40)
輸出結果如下:
:
h2emoji,自己實現了一個可能有點兒用的擴展: demo_show_animation.py.它可以將一句話在終端依次打印出來,使用你決定的emoji或者其他字符.比如你試著執行 python ./demo_show_animation.pypy 喜歡就點個讚唄, 將在終端執行一段展示文字的動畫, 展示的文字就是你剛才輸入的話.
如果你能夠堅持看到這裡, 不知道你有沒有想到一些有意思的玩法不? 歡迎一起參與。程式設計是一種樂趣,程式碼是將一些頭腦想法實現出來的媒介;程式設計師寫程式碼,就好比作家寫寫文字,是一種習慣。
後續我可能打算, 在終端實現播放一個由emoji組成的簡筆畫形象的動畫(比如布卡娘的加載動畫)