摘要:使用表情組成漢字或者簡筆畫,在微信的傳播中甚廣,就會想著要不自己也試著做出來吧比如下圖實現(xiàn)步驟一開始想到的實現(xiàn)方案就是首先將漢字轉(zhuǎn)化成白底黑字的圖片然后將圖片根據(jù)灰度值映射成不同的字符打印在終端。
這只是一個娛樂性的實現(xiàn),純屬突發(fā)奇想。
使用Emoji表情組成漢字或者簡筆畫,在微信、QQ的傳播中甚廣,就會想著要不自己也試著做出來吧.
比如下圖:
實現(xiàn)步驟一開始想到的實現(xiàn)方案就是: 首先將漢字轉(zhuǎn)化成白底黑字的圖片, 然后將圖片根據(jù)灰度值映射成不同的字符打印在終端。
前者文字轉(zhuǎn)圖片,使用常見的繪圖庫非常好實現(xiàn)(比如python的PIL庫);
工作量無非只是實現(xiàn)過程中慢慢調(diào)整排版, 以達(dá)到自己的預(yù)期效果.
后者則是簡單的映射關(guān)系而已: 將圖片中像素點的灰度值, 映射成某個字符; 在該實現(xiàn)中, 對于黑底白字的圖片只有兩個映射關(guān)系, 黑字對應(yīng)要替換的Emoji字符, 白底對應(yīng)空白.
該部分的python實現(xiàn)代碼如下:
ascii_char = list("1234567890abcd ") # 任意多個字符,灰度值的映射區(qū)間 def select_ascii_char(r, g, b): """ 在灰度圖像中,灰度值最高為255,代表白色; 最低為0,代表黑色 """ # 把RGB轉(zhuǎn)為灰度值,并且返回該灰度值對應(yīng)的字符標(biāo)記 # "RGB-灰度值"轉(zhuǎn)換公式如下 gray = int((19595 * r + 38469 * g + 7472 * b) >> 16) # ascii_char中的一個字符所能表示的灰度值區(qū)間 unit = 256.0 / len(ascii_char) return ascii_char[int(gray/unit)]
select_ascii_char 就實現(xiàn)了將一個像素點映射成一個具體的自定義字符char.
在本功能的實現(xiàn)中, ascii_char更簡單, 只需要兩個字符即可: 一個任意給定, 一個是空格.
因此將 ascii_char 換成 [u"?? ", u" "]
由于需要將圖片的像素點映射到可在終端打印的字符, 終端的顯示空間有限, 所以需要對圖片進(jìn)行縮小調(diào)整.
zh2emoji的代碼在我的github上有對應(yīng)的代碼下載, 如果你有興趣,可以fork后實現(xiàn)自己想要的更多自定義功能.
展示例子一個"茴"字我有N多種寫法:
print image2print(word2image(u"茴"), u"?? ") print image2print(word2image(u"茴"), u"茴", width=40)
輸出結(jié)果如下:
用
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/44295.html
showImg(https://segmentfault.com/img/remote/1460000018653055?w=900&h=500); 簡介 字符編碼、字符長度錯誤、截取字符錯誤、UTF8、Unicode 計算機(jī)重重底層之下都是由 0 和 1 組合,但是你知道他們是怎么一步步變成字符串的嘛?在我們現(xiàn)實生活中最常見的例子可以通過 wo 在新華字典中找到 我 這個字。同樣計算機(jī)通過 0 ...
閱讀 351·2024-11-07 18:25
閱讀 130598·2024-02-01 10:43
閱讀 914·2024-01-31 14:58
閱讀 879·2024-01-31 14:54
閱讀 82884·2024-01-29 17:11
閱讀 3176·2024-01-25 14:55
閱讀 2028·2023-06-02 13:36
閱讀 3108·2023-05-23 10:26