在in里面用标签怎么把emoji表情代码放进去

探索在Android中使用Emoji Font的方法 - 为程序员服务
探索在Android中使用Emoji Font的方法
先说结论,在android4.4以前,无法使用像苹果那样的emoji字体样式,最简单的解决方案是使用ImageSpan配合SpannableString,而在4.4及之后的版本,则可以直接采用类似iOS/OSX的方案进行快速渲染。
Apple Color Emoji
表情,最初是从日本的“绘文字”演化过来,在没有正式定下规范之前,日本的三大电信运营商,NTT DoCoMo,au/KDDI,Softbank都各自有一套关于Emoji的编码规范,而且在这个时候,每个Emoji表情对应的表情图片也是没有统一规范的。这时候,应用最广泛的是应该的属于日本软银(Softbank)的Softbank编码了,在iOS系统的早期的版本上,采用的也是这个编码规范。
后来,在2010年10月,随着Unicode6.0的发布,Emoji的编码以及对应的表情图片正式被规范化,核心Emoji表情包含722个Emoji编码。而到了Unicode 7.0(2014年6月发行)之后,更多的Emoji表情被加入了进来,包括一些其他比较偏门的Emoji表情组,例如,,也被编入了Unicode 7.0规范,此时,整个Emoji编码集合已经有大概1000个左右,而在表情图片的规范上,除了我们常见的ios style之外,还有Android Style,Twitter Style等,在,有一份比较详细的Emoji表情列表,包含了不同的表情样式以及对应的编码。
而在iOS系统上,在Unicode 6.0规范出来之前,原来也是采用Softbank编码(iOS 4以及之前版本),而Unicode 6.0规范之后(iOS 5以及之后的版本,或者OSX Lion之后的系统),则改为使用了Unicode编码。
那么,iOS/OSX是怎么把这些Emoji表情渲染出来的呢?
在OSX 10.7之后,OSX引入Color Emoji,这是苹果第一次在自己的桌面操作系统引入Emoji,用户可以直接在Mail或者iMessage之类的客户端直接输入Emoji字符。OSX(其实iOS也是用基本相同的实现)上的实现是通过一个叫做Apple Color Emoji的字体来实现的,这个字体文件被放在了/System/Library/Fonts/Apple Color Emoji.ttf目录中。关于这个字体的细节,在Typophile中曾经有进行过相关的,最后有工程师使用逆向工程分析了这个字体文件的格式,得出来的结论是,苹果扩展了OpenType标准,在ttf文件中直接嵌入了包含Emoji表情的图片,然后输入的时候通过根据Emoji表情的Unicode编码,找到对应的图片,将表情渲染出来。
国外的程序员总是不用加班,因此他们很有空的研究了Apple Color Emoji的具体实现。前面提到,有工程逆向分析了Apple Color Emoji的采用的技术,下面我们来具体操作一下,最后我们可以提取出Apple Color Emoji.ttf中的所有Emoji图片,以下的流程来自Typophile的一篇:
安装FontTools,这是一个将ttf文件转换成xml,或者将xml转换成ttf文件的工具,使用python编写,如果已经安装了pip,可以通过pip install FontTools来安装。
上述文章中作者提供了一个FontTools的扩展,叫做sbix_code.zip,之后解压缩,将里面的文件复制到FontTools在python的site-packages目录下,如果是在OSX上,假设你使用的是python 2.7,那一般是在/Library/Python/2.7/site-packages/FontTools目录下。
该作者还提供了一个使用的demo:,解压缩之后编辑里面的extractSbixImages.py,修改如下:
#! /usr/bin/env/python
from fontTools.ttLib import TTFont
from os.path import exists, join
from os import makedirs
def main():
f = TTFont(&Apple Color Emoji.ttf&)
if f.has_key(&sbix&):
sbix = f[&sbix&]
for bs in sbix.bitmapSets.itervalues():
setpath = join(&extracted&, &set_%i& % bs.size)
if not exists(setpath):
makedirs(setpath)
print &Writing bitmap set to &%s&& % setpath
for bm in bs.bitmaps.itervalues():
if bm.imageFormatTag is not None:
filename = join(setpath, &%s.png& % bm.glyphName)
pf = file(filename, &wb&)
pf.write(bm.imageData)
pf.close()
print &Font has no sbix table.&
if __name__ == &__main__&:
其中"Apple Color Emoji.ttf"请改成Apple Color Emoji.ttf这个文件对应的目录
执行脚本,然后我们看到在同目录下多了一个叫做extracted文件夹,里面分别存放着不同分辨率的Emoji表情图片:
set_**目录分辨对应不同的分辨率,可以看出,Apple Color Emoji.ttf这个字体内嵌了多达8中不同分辨率的Emoji图片,难怪这个字体文件的大小达到了34M。
非常感谢这位程序员的工作,使得我们能够一窥这个字体的大致实现,但是很可惜,这个实现是苹果自己的私有标准,没有合入到OpenType的正式标准中,而苹果官方对这里的实现也没有更多的资料,所以具体的技术标准,目前暂时找不到更加详细的资料。
Google Extension
Google一直以来都是程序员的救星,在Apple Color Emoji推出多年之后,在2013年,Google终于也推出了自己的开源Color Font标准:,Google同样扩展了OpenType的标准,并且提供了一个开源的实现:。Google通过以下方式扩展OpenType,使其支持Color Emoji:
复用在ttf文件结构中的EBDT/EBLC表,直接内嵌Emoji图片的ARGB信息到这两个表当中,根据Google的标准,目前采用的是每个像素24位来存储,以BGRA顺序存储。值得一提的是,在ttf文件中,这两个表本来就是设计用于内嵌图片数据的,用于小分辨率字体的渲染,本来一般每像素只用8位存储,因此只能存储黑白图片,详细可以看下微软的官方,不过在这种情况下,内嵌的图片是未经压缩的。
另外一种方法是Google在ttf文件中新增了两个表,叫做CBDT/CBLC,在这两个表中可以存储经过压缩的图片格式,目前只支持PNG这一种格式。
注:ttf文件的格式大致是以表为单位存储各种不同的数据,关于ttf文件的格式,可以查看微软的官方
可以看出,Google的实现大致也苹果的类似,都是内嵌了图片在ttf文件中。而在Google提供的开源实现当中,主要包括以下几个项目的扩展:
freetype的扩展,Google扩展了freetype这个库,使其支持Google的ttf扩展
skia,支持freetype扩展之后的字体解析输出
cairo,支持了freetype扩展之后的输出,并且对于不能渲染的状况,fallback成使用Xlib作为后端(cairo也是和skia一样的2D矢量绘图库,可以选择多个后端,例如选择OpenGL为后端可以实现硬件加速)
其中,这个项目的freetype以及skia的实现被带入了Android 4.4中,也就是说,在Android 4.4之后的版本,我们终于可以像iOS一样使用Color Emoji Font了!!
Using in Android
上文提到,在Android 4.4之后,Google终于支持了Color Emoji Font,实际上,如果你用的是Google输入法,则可以发现在这个面板上输入到所有Google Style的Emoji表情:
但是,很明显,Google提供的Emoji字体的样式实在是太丑了,很多人还是喜欢原来苹果的Emoji样式:
既然Android 4.4之后新增了Color Emoji Font的支持,根据上面的叙述,我们是否可以自己制作一个iOS Style Emoji字体给我们使用呢,答案当然是可以了,在xda论坛上,已经有人进行了这种,原理是利用OSX中的Apple Color Emoji.ttf提取出来的图片,然后使用FontTools以及项目中的相关脚本即可生成对应的ttf文件。
由于整个生成过程比较复杂,涉及比较多的依赖,有兴趣的可以看下color-emoji项目中的example的Makefile文件的内容,可以看到每一步是怎么生成的,在这里由于篇幅有限就不再赘述了。根据此方法生成的ttf文件,大家可以在这里
在生成了这个emoji字体文件之后,我们就可以直接在android中使用了,有以下两种方式:
root了手机之后,更改系统的字体配置文件,使其作为系统的默认emoji字体。
在TextView中使用setTypeface来设置字体,只要TextView中包含的内容含有emoji指定的unicode编码,就可以直接显示emoji表情了。
对比起使用SpannableString那一套,直接通过setTypeface来显示emoji文字的性能差距究竟有多少呢?接下来我们来简单的测试一下。
在测试用例的选择方面,我们选择一条3000多行的emoji表情字符串,算是一个非常极端例子(每个表情后面跟上一个换行符):
测试基准为,从startActivity开始,到包含表情的Activity的中展示emoji的TextView第一次调用dispatchDraw方法为止所消耗的时间,测试的环境为Nexus 5,Android 5.0,测试10次,计算平均时间:
使用Emoji Font,平均时间为433ms
使用SpannableString(不带cache),平均时间为9457ms
如果SpannableString带上cache之后,可以省去了重复setSpan的耗时了,此时的平均时间为8357ms
可以看出,Emoji Font比SpannableString的方案快了一个数量级,而且即使带上cache,使用SpannableString出来的效果也没有想象中好,究其原因,或许是由于在绘制时,getSpans操作中的反射消耗了大量时间。
Backport to pre-KitKat
Color Emoji Font是Android4.4才加上的新功能,那对于4.4之前的版本,有没有办法也能使用Emoji Font呢,我想到了两点,但似乎都不大可行:
将skia和freetype带入app中,使用其中的API去解析,然后构建一个Typeface给TextView使用。先不讨论是否可行,首先skia编译出来的so已经是非常大了,skia官方的android app demo中的的libskia_android.so大小达到36M,完全不可能放在普通app中。
重造TextView,自行解析emoji符号,不使用SpannableString,而是直接画出来。使用这个方案之后,Emoji Font就不是必须的了,但重造TextView的成本也是太高了。
因此,最终的结论仍然是开头中所说的,在android4.4以前,无法使用像iOS/OSX那样的Emoji Font,最简单的解决方案是使用ImageSpan配合SpannableString,而在4.4及之后的版本,则可以直接采用类似iOS/OSX的方案进行快速渲染。
最后,祝愿Lollipop的光芒能够早日照亮天朝。
原文地址:, 感谢原作者分享。
您可能感兴趣的代码Emoji表情符号是如何征服世界的
字号: T|T
  栗田穣崇的目标是创造一整套176个12x12像素的字符,将人类的所有表情都涵盖在内。
  灵感出处
  栗田穣崇将目光投向儿时的各种元素以获取灵感,如日本漫画和日本汉字等。&日本漫画中有许多不同的符号。漫画家会画出一些表情,表现一个人满头大汗或是迸发出一个想法时头上出现一个灯泡。在很多情况下,我借用了这种表达方式,然后进行了重新安排。&同时,从日本汉字中他获得了一种能力,用简单的字符来表达&秘密&和&爱&等抽象概念。
  为了显示这些字符,NTT决定开发Shift JIS日文字符编码表中尚未被使用过的一个区域。每两个字节的编码都将对应一个独特的图像,所有这些图像都将像其他任何字符一样载入NTT经销的手机;然后,用户只需在电子邮件应用内部的一个栅格里选中图像,将其加入到信息中即可。但是,NTT并非只将电子邮件作为Emoji的目标,这种易于获取的图像同时还允许内容提供商装饰其i-mode网站。Zagat和Pia等内容提供商最先开始为NTT这项实验性的新服务提供内容,并将这些表情符号称作一种&外快&,原因是它们的公司Logo也跻身于最初安装在NTT手机上的Emoji表情符号。不过,在最初合同于一两年后到期以后,这些Logo就被删除了。
  由于只有12x12的栅格可用,栗田穣崇在设计Emoji表情符号时不得不在空间使用的问题上精打细算;其结果是,他设计的这些符号极其简约。举例来说,最初的笑脸表情拥有矩形的嘴巴,还有倒V字形的眼睛;&艺术&和&牛仔裤&的字符几乎让人认不出来。事实上,最初的Emoji表情与日本以外的人们所熟悉的黄色表情符号相比非常不同,甚至可能不会被认为是同一种表情。当被问及对斯科特&法曼(Scott Fahlman,被广泛认为是表情符号的发明者)教授有关Emoji很难看的说法作何感想时,栗田穣崇很痛快地撇清了与AU等其他公司创造的表情符号之间的关系。&是的,坦白的说,这些符号是有些丑。&他说道。其他人都尝试把字符变得更像是图像,而栗田穣崇则一直把Emoji当做符号,更适合在信件中使用,让人们在把这些符号嵌到句子中时不会有格格不入的感觉。&我在某种程度上同意他的看法;但我身体里有另一个人则想要问问他,(在邮件中的使用)又如何呢?&栗田穣崇开玩笑的说道。
  大杂烩
  当栗田穣崇手中拥有最终设计以后,他原以为此前拒绝他的那些厂商将可做一些最后润色的工作,将Emoji表情符号变成更加专业的东西。&但所有厂商都只是拿走了我们设计的东西,然后就那样用了。&他笑着说道。&这样做的好处是,所有人的Emoji符号都是相同的。如果每家厂商都在这些字符中加入自己的创意,那么Emoji本来将会变成&大杂烩&一样的东西,各个厂商之间都不一致,甚至在NTT内部也是如此。&
  但这种一致性不会持续很长时间。NTT未能获得Emoji设计版权(这家公司被告知:&它们只不过是12x12的积木而已&),这意味着AU和J-Phone(软银前身)等竞争对手在推出自己的Emoji表情符号时可以轻易借用NTT的成功。不过,这两家公司都选择开发自己的表情,加入了更多更详尽的图像,此外还推出了动画版的表情,希望藉此吸引用户。其结果是,原本可以统一化的字符变成了各种自主开发表情的&大杂烩&,导致从一家运营商经销的手机发送至竞争对手经销手机上的Emoji表情无法显示。直到2005年,这三大运营商才开始将来自竞争对手的输入信号加入到自己的字符集合中。到最后,AU去年采取了姗姗来迟的标准化措施,决定重新设计主要的字符组合,使其看起来类似于最初的NTT设计;在这一过程中,AU获得了栗田穣崇的帮助。但尽管如此,仍旧还是存在多种字符集合,这些字符按运营商和手机的不同而有所差异。NTT已将字符集合的数字扩大至250个左右,其中不包括动画版字符。而与此相比,有些设备可显示800多个表情符号。
  里程碑
  在被问及对Emoji已被Unicode(统一码,也称万国码,为每种语言中的每个字符设定了统一并且唯一的二进制编码)采纳有何感想时,栗田穣崇表示,虽然已从NTT离职,但他还是对这一里程碑式的成就感到高兴;但与此同时,他对Emoji字符在不同运营商和设备上差异化的安装启用感到失望。而且,他对Unicode Consortium的设计选择也并不那么狂热。&(日本电信运营商)KDDI已决定把所有Emoji符号都变得跟NTT一样。如果这种符号能成为标准,那么会是非常好的。&栗田穣崇说道。
  虽然日本各大运营商未能设法标准化Emoji表情符号,但这并未阻止这种符号在海外市场上变得流行。从发布iOS 2.2更新起,苹果iPhone就已开始支持软银的Emoji符号,至少在日本是如此;但直到iOS 5在2011年底发布,这种表情符号才真正在 市场上登台。随着人们弄懂了如何在手机上激活这些符号,它们开始在Twitter、Instagram和轻博客Tumblr等各个网站上生根发芽。时至今日,这些字符已随处可见,从母亲发给儿女的文本信息,到Narratives in Emoji和Emoji Art History等项目无不如是。弗莱德&本南森(Fred Benenson)的Emoji Dick是赫尔曼&梅尔维尔(Herman Melville)经典著作的Emoji版,最近刚被加入国会图书馆收藏。虽然Google Talk和Skype等服务所提供的表情符号是自己的东西,但看起来也跟Emoji十分相似。
  文化差异
  在被问及对播种了一场国际化运动有何感想时,栗田穣崇回答道:&我对此感到高兴;但坦白的说,那并非我真正了解的事情。你知道,那真的是太大了。&他还继续说道,他对来自不同文化的人们在使用Emoji表情符号时有多么相似感到好奇。&我真的想知道,他们会在多大程度上以相同的方式使用这些符号,而在多大程度上存在地区性的差异。我认为,心形符号很可能会被所有人以相同的方式使用,但有些东西很可能只有日本人才能了解,或是只有美国人才能了解&&如果我们能作出比较,那将是件很好的事情,会让人们开始以同样的方式来使用表情符号。&对互联网来说,Emoji表情符号在某种程度可以说是一种身体语言。&自始至终,一直都是人们在使用这些字符;而如果我能做相反的事情,从其他所有人那里学到什么东西,那么我会感到很高兴。&
  栗田穣崇拨给我们采访的时间已堪堪用完,他现在必须返回自己的工作岗位,管理视频游戏公司Bandai-Namco向网络漫画领域推进的相关事务。在我站起身来准备离开时,我向这位Emoji表情符号的创造者提出了一个永恒性的问题:当一个女孩在文本中发给你一个心形符号时,那意味着什么呢?&我不知道那是否意味着她喜欢我。&栗田穣崇笑着说道。&但我知道那是件好事,我不会觉得那是什么负面的东西。&
  本文编译自The Verge
  (唐风)
责任编辑: 豆豆
在2013年的投资判断中,最需要改变的是原有的周期思维,周期思维不再适用。
伴随着M2/GDP由低转高,2009年开始中国一线城市房价大多翻倍了。
电梯和千家万户有着密切联系,仅仅将电梯当做普通的生活用品是不够的,
随着利率市场化改革进一步推进、人民币汇率进入均衡区间、人民币资本项目可兑换改革的进一步深化,以及存款保险制度的建立和实施,中国经济正步入对外开放的转型期。
社交网络为她们大胆展现暴露提供了绝佳平台,观众由此见识到她们的撩人妩媚。
生活中炫富的干女儿并不少见,那么就来看看那些姿色上等的“坑爹”炫富女吧。
10年猎头生涯,年薪百万的牛人也接触不少。无论在内企……
大公报总机:+852-&&&&&大公网:香港 +852-&&&&&北京 +86-10-&&&&&(值班电话):+86-10-
大公网版权所有,未经允许,不得转载 中国大公网络有限公司iOS 问题:求教各位前辈~怎么把textview里面打出来的emoji表情(系统自带)转换成
\U0001f42f
这种格式?
我想把用户输入的表情符号转成这种格式然后上传到服务器,然后别人接收的时候直接就能显示表情,不用再转了... -
求教各位前辈~怎么把textview里面打出来的emoji表情(系统自带)转换成
\U0001f42f
这种格式?
我想把用户输入的表情符号转成这种格式然后上传到服务器,然后别人接收的时候直接就能显示表情,不用再转了...
共有 2 个回答
追加一下~~label.text=@"\U0001f42f";
这样写的话label上会显示出一个小老虎~
登录后方可回复
楼主解决这个问题了吗?
登录后方可回复
登录后方可回答
耗时 0.0669 秒}

我要回帖

更多关于 emoji表情代码 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信