首頁 >php教程 >PHP开发 >使用emoji字符組成任意漢字

使用emoji字符組成任意漢字

高洛峰
高洛峰原創
2016-11-23 15:51:585309瀏覽

使用emoji表情組成漢字或簡筆畫,在微信、QQ的傳播中甚廣,就會想著要不自己也試著做出來吧.

比如下圖:

使用emoji字符組成任意漢字

一開始想到的實現方案是: 首先將漢字轉換成白底黑字的圖片, 然後將圖片根據灰階值映射成不同的字元印在終端機上。

前者文字轉圖片,使用常見的繪圖庫非常好實現(比如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)

輸出結果如下:

使用emoji字符組成任意漢字

:使用emoji字符組成任意漢字

使用emoji字符組成任意漢字

h2emoji,自己實現了一個可能有點兒用的擴展: demo_show_animation.py.

它可以將一句話在終端依次打印出來,使用你決定的emoji或者其他字符.

使用emoji字符組成任意漢字比如你試著執行 python ./demo_show_animation.pypy 喜歡就點個讚唄, 將在終端執行一段展示文字的動畫, 展示的文字就是你剛才輸入的話.

如果你能夠堅持看到這裡, 不知道你有沒有想到一些有意思的玩法不? 歡迎一起參與。程式設計是一種樂趣,程式碼是將一些頭腦想法實現出來的媒介;程式設計師寫程式碼,就好比作家寫寫文字,是一種習慣。 使用emoji字符組成任意漢字

後續我可能打算, 在終端實現播放一個由emoji組成的簡筆畫形象的動畫(比如布卡娘的加載動畫)

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn