资讯专栏INFORMATION COLUMN

使用Emoji表情拼成汉字

ernest.wang / 2358人阅读

摘要:使用表情组成汉字或者简笔画,在微信的传播中甚广,就会想着要不自己也试着做出来吧比如下图实现步骤一开始想到的实现方案就是首先将汉字转化成白底黑字的图片然后将图片根据灰度值映射成不同的字符打印在终端。

这只是一个娱乐性的实现,纯属突发奇想。

使用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后实现自己想要的更多自定义功能.

展示例子

一个"茴"字我有N多种写法:

    print image2print(word2image(u"茴"), u"❤️ ")
    print image2print(word2image(u"茴"), u"茴", width=40)

输出结果如下:


文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/44295.html

相关文章

  • mysql 编码和汉字存储占用字节问题的探索

    摘要:以上的版本一个汉字占多少长度与编码有关一个汉字个字节,英文是一个字节一个汉字个字节,英文是一个字节表示个字符,无论汉字和英文,都能存入个字符,仅实际字节长度有所区别。 MySql 5.5 之前,UTF8 编码只支持1-3个字节,只支持BMP这部分的unicode编码区,BMP是从哪到哪?戳这里 基本就是 0000 ~ FFFF 这一区。 从MySQL 5.5 开始,可支持4个字节UTF...

    zhouzhou 评论0 收藏0
  • MySQL 支持 emoji 图标存储

    摘要:所以要解决问题,必需把数据库表字符编码全部改成。标准的可变长度字符编码标准统一码,业界统一标准,包括世界上数十种文字的系统使用一至三个字节为每个字符编码。 笔记在这里持续更新 在MySLQ中 UPDATA 和 INSERT 数据的时候,如果数据上面带有emoji图标,例如:?、?、? 很容易更新或者插入不成功,导致报错。 Error: ER_TRUNCATED_WRONG_VALUE_...

    joywek 评论0 收藏0
  • 每日 30 秒 ⏱ 字符编码排雷录

    showImg(https://segmentfault.com/img/remote/1460000018653055?w=900&h=500); 简介 字符编码、字符长度错误、截取字符错误、UTF8、Unicode 计算机重重底层之下都是由 0 和 1 组合,但是你知道他们是怎么一步步变成字符串的嘛?在我们现实生活中最常见的例子可以通过 wo 在新华字典中找到 我 这个字。同样计算机通过 0 ...

    mmy123456 评论0 收藏0
  • PHP开发中涉及到emoji表情的几种处理方法

    摘要:最近几个月做微信开发比较多,存储微信昵称必不可少可这万恶的微信支持表情做昵称,这就有点蛋疼了一般表设计时,都是用字符集的。 最近几个月做微信开发比较多,存储微信昵称必不可少可这万恶的微信支持emoji表情做昵称,这就有点蛋疼了 一般Mysql表设计时,都是用UTF8字符集的。把带有emoji的昵称字段往里面insert一下就没了,整个字段变成了空字符串。这是怎么回事呢? 原来是因为My...

    big_cat 评论0 收藏0
  • PHP开发中涉及到emoji表情的几种处理方法

    摘要:最近几个月做微信开发比较多,存储微信昵称必不可少可这万恶的微信支持表情做昵称,这就有点蛋疼了一般表设计时,都是用字符集的。 最近几个月做微信开发比较多,存储微信昵称必不可少可这万恶的微信支持emoji表情做昵称,这就有点蛋疼了 一般Mysql表设计时,都是用UTF8字符集的。把带有emoji的昵称字段往里面insert一下就没了,整个字段变成了空字符串。这是怎么回事呢? 原来是因为My...

    impig33 评论0 收藏0

发表评论

0条评论

ernest.wang

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<