渲染字体的方法及系统转让专利

申请号 : CN201110308683.3

文献号 : CN102509329B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 王成

申请人 : 盛乐信息技术(上海)有限公司

摘要 :

本发明涉及一种渲染字体的方法及系统,所述方法包括:As3脚本对Svg文档进行解析,找到字体的相关节点,并提取所述相关节点中的字体信息;根据所述字体信息按照swf文件格式规范构建DefineFont3节点、DefineFontName节点、及包含一字体定义类的DoAbc节点;通过SymbolClass节点建立所述字体定义类与DefineFont3及DefineFontName节点的关联,在所述关联的基础上构建swf字体库;As3脚本加载所述swf字体库交由flash虚拟机解析,所述flash虚拟机生成嵌入字体;As3脚本指定所述嵌入字体及其字体名称。本发明借由flash虚拟机实现了flash平台下对svg字体进行不失真的渲染,从而在虚拟机层面上实现字体的应用,As3脚本只需使用少量代码即可实现相应字体的应用,相对于传统的As3脚本绘制的方法性能更高。

权利要求 :

1.一种渲染字体的方法,其特征在于,包括:

As3脚本对Svg文档进行解析,找到字体的相关节点,并提取所述相关节点中的字体信息;

根据所述字体信息按照swf文件格式规范构建DefineFont3节点、DefineFontName节点、及包含一字体定义类的DoAbc节点,其中,所述DefineFont3节点包括字体的最后一个节点和首节点的差值;

通过SymbolClass节点建立所述字体定义类与DefineFont3及DefineFontName节点的关联,在所述关联的基础上构建swf字体库;

As3脚本加载所述swf字体库交由flash虚拟机解析,所述flash虚拟机生成嵌入字体,As3脚本指定所述嵌入字体及其字体名称。

2.如权利要求1所述的渲染字体的方法,其特征在于,所述相关节点包括font节点的font-face子节点和glyph节点。

3.如权利要求2所述的渲染字体的方法,其特征在于,所述font-face子节点的字体信息中包括ascent和descent字体度量信息及每em的单位划分。

4.如权利要求2所述的渲染字体的方法,其特征在于,所述glyph节点的字体信息包括字体的unicode编码、水平方向的advance值以及字形信息。

5.一种渲染字体的系统,其特征在于,包括:

字体信息提取模块,用于As3脚本对Svg文档进行解析,找到字体的相关节点,并提取所述相关节点中的字体信息;

节点构建模块,用于根据所述字体信息按照swf文件格式规范构建DefineFont3节点、DefineFontName节点、及包含一字体定义类的DoAbc节点,其中,所述DefineFont3节点包括字体的最后一个节点和首节点的差值;

关联模块,用于通过SymbolClass节点建立所述字体定义类与DefineFont3及DefineFontName节点的关联;

补充模块,用于在所述关联的基础上构建swf字体库;

加载模块,用于As3脚本加载所述swf字体库交由flash虚拟机解析;

flash虚拟机,用于解析所述swf字体库生成嵌入字体;

指定模块,用于As3脚本指定所述嵌入字体及其字体名称。

6.如权利要求5所述的渲染字体的系统,其特征在于,所述字体信息提取模块找到的所述相关节点包括font节点的font-face子节点和glyph节点。

7.如权利要求6所述的渲染字体的系统,其特征在于,所述字体信息提取模块提取的字体信息包括所述font-face子节点中的ascent和descent字体度量信息及每em的单位划分。

8.如权利要求6所述的渲染字体的系统,其特征在于,所述字体信息提取模块提取的字体信息包括所述glyph节点中的字体的unicode编码、水平方向的advance值以及字形信息。

说明书 :

渲染字体的方法及系统

技术领域

[0001] 本发明涉及一种渲染字体的方法及系统。

背景技术

[0002] svg是一种矢量图形描述格式,其中包含字体的描述,字体中包含字体对应的字形。flash是Adobe公司开发的一种二进制文件格式,通常以“.swf”为扩展名,主要以节点(tag)的方式来组织,可支持Actionscript(As)脚本编写,运行于flash虚拟机(avm)之上,广泛应用于互联网的视频、游戏、广告等领域。
[0003] svg图形描述文档中包含完整的字体信息,以实现不同平台上的一致显示,要实现svg字体在flash文件中的显示就需要对svg字体的渲染即进行As3脚本绘制,整个渲染过程需要使用者编写一套完整的文字渲染引擎,包括根据字形信息进行图形绘制、及对文字相关的复制、删除、剪切、粘贴、选取操作等进行大量的代码编写,整个渲染过程非常繁琐,而且在flash下通过As3脚本实现大量字体的渲染,对于大量文本显示性能不高。

发明内容

[0004] 本发明的目的在于提供一种渲染字体的方法及系统,该方法及系统实现了flash中对svg字体进行不失真的渲染。
[0005] 为解决上述问题,本发明提供一种渲染字体的方法,包括:
[0006] As3脚本对Svg文档进行解析,找到字体的相关节点,并提取所述相关节点中的字体信息;
[0007] 根据所述字 体信息按照swf文件 格式规范构建DefineFont3节 点、DefineFontName节点、及包含一字体定义类的DoAbc节点;
[0008] 通过SymbolClass节点建立所述字体定义类与DefineFont3及DefineFontName节点的关联,在所述关联的基础上构建swf字体库;
[0009] As3脚本加载所述swf字体库交由flash虚拟机解析,所述flash虚拟机生成嵌入字体;
[0010] As3脚本指定所述嵌入字体及其字体名称。
[0011] 进一步的,在上述方法中,所述相关节点包括font节点的font-face子节点和glyph节点。
[0012] 进一步的,在上述方法中,所述font-face子节点的字体信息中包括ascent和descent字体度量信息及每em的单位划分。
[0013] 进一步的,在上述方法中,所述glyph节点的字体信息包括字体的unicode编码、水平方向的advance值以及字形信息。
[0014] 进一步的,在上述方法中,所述DefineFont3节点包括字体的最后一个节点和首节点的差值。
[0015] 根据本发明的另一面,提供一种渲染字体的系统,包括:
[0016] 字体信息提取模块,用于As3脚本对Svg文档进行解析,找到字体的相关节点,并提取所述相关节点中的字体信息;
[0017] 节点构建模块,用于根据所述字体信息按照swf文件格式规范构建DefineFont3节点、DefineFontName节点、及包含一字体定义类的DoAbc节点;
[0018] 关联模块,用于通过SymbolClass节点建立所述字体定义类与DefineFont3及DefineFontName节点的关联;
[0019] 补充模块,用于在所述关联的基础上构建swf字体库;
[0020] 加载模块,用于As3脚本加载所述swf字体库交由flash虚拟机解析;
[0021] flash虚拟机,用于解析所述swf字体库生成嵌入字体;
[0022] 指定模块,用于As3脚本指定所述嵌入字体及其字体名称。
[0023] 进一步的,在上述系统中,所述字体信息提取模块找到的所述相关节点包括font节点的font-face子节点和glyph节点。
[0024] 进一步的,在上述系统中,所述字体信息提取模块提取的字体信息包括所述font-face子节点中的ascent和descent字体度量信息及每em的单位划分。
[0025] 进一步的,在上述系统中,所述字体信息提取模块提取的字体信息包括所述glyph节点中的字体的unicode编码、水平方向的advance值以及字形信息。
[0026] 进一步的,在上述系统中,所述DefineFont3节点包括字体的最后一个节点和首节点的差值。
[0027] 与现有技术相比,本发明通过As3脚本对Svg文档进行解析,找到所述字体的相关节点,并提取所述相关节点中的字体信息,根据所述字体信息按照swf文件格式规范构建DefineFont3节点、DefineFontName节点、及包含一字体定义类的DoAbc节点,通过SymbolClass节点建立所述字体定义类与DefineFont3及DefineFontName节点的关联,在所述关联的基础上构建完整的swf字体库,As3脚本加载所述swf字体库交由flash虚拟机解析,所述flash虚拟机生成嵌入字体,As3脚本指定所述嵌入字体及其字体名称,从而借由flash虚拟机实现了flash平台下对svg字体进行不失真的渲染,在虚拟机层面上实现字体的应用,而且As3脚本只需使用少量代码即可实现相应字体的应用,相对于传统的As3脚本绘制的方法性能更高。

附图说明

[0028] 图1是本发明一实施例的渲染字体的方法的流程图;
[0029] 图2是本发明一实施例的svg字体处理的流程图;
[0030] 图3是现有技术的使用Firefox6渲染的效果图;
[0031] 图4是本发明一实施例的flash动态字体库渲染效果图;
[0032] 图5是本发明一实施例的渲染字体的系统的功能模块示意图。

具体实施方式

[0033] 以下结合附图和具体实施例对本发明提出的渲染字体的方法及系统进一步详细说明。
[0034] 如图1和图2所示,一种渲染字体的方法,包括:
[0035] 步骤S1,As3脚本对Svg文档进行解析,找到字体的相关节点,并提取所述相关节点中的字体信息;
[0036] 步骤S2,根据所述字体信息按照swf文件格式规范构建DefineFont3节点、DefineFontName节点、及包含一字体定义类的DoAbc节点,具体的,用As3脚本构建flash虚拟机可解析的Abc代码可提供导出的字体定义类,所述字体定义类可以由字体库给外部使用;
[0037] 步骤S3,通过SymbolClass节点建立所述字体定义类与DefineFont3及DefineFontName节点的关联,在所述关联的基础上构建完整的swf字体库,具体的,可补充其他需要的节点,以构建完整的swf字体库;
[0038] 步骤S4,As3脚本加载所述swf字体库交由flash虚拟机解析,所述flash虚拟机生成嵌入字体,具体的,通过将svg的字体转换为包含所述嵌入字体的swf字体库,借由flash虚拟机实现flash平台下的svg字体渲染,同时,由于As3脚本是在flash虚拟机(avm)上运行的一个脚本,其本身的渲染性能比flash虚拟机(avm)的渲染性能要差很多,本方法借用flash虚拟机的嵌入字体功能,能够用较少的代码实现外挂字体渲染,这种方法在文本量较大时候性能相对较高。
[0039] 步骤S5,As3脚本指定所述嵌入字体及其字体名称,具体的,通过从svg文件中读取字体信息,动态构建swf字体库以后,flash虚拟机可以直接使用,从而在虚拟机层面上实现字体的应用,As3脚本只需使用少量代码即可实现相应字体的应用,且性能相对更高,如图3和图4所示,flash动态字体库渲染效果图中的“U”字体与Firefox6渲染的效果图“U”字体一致,没有失真。
[0040] 以下一个svg文件的详细内容:
[0041]
[0042]
[0043] 具体来说,针对上述svg文件,在步骤S1中,首先提取svg文件的defs中的font节点的font-face子节点中的ascent和descent字体度量信息及每em的单位划分,然后提取glyph节点中包含的该字体对应的unicode编码、水平方向的advance值以及字形信息。
[0044] 由于svg字形采用的是绝对坐标,而在swf文件格式中的字形采用的是相对坐标,在步骤S2中,DefineFont3节点每em默认为1024,并且使用twisp作为存储单位(1px=20twisp),Y方向的坐标与svg中的相反,并且字形采用的是坐标偏移量,因而,首先需要将svg字形中的每个X坐标乘以系数:1024*20/2048,Y坐标乘以-1*1024*20/2048,然后计算每个X、Y值分别和前一X、Y的差,作为DefineFont3中的对应坐标,另外,svg中字体坐标默认自动闭合,即最后一个节点和第一个节点相连,而DefineFont3节点中不会相连,因而需要将字体的最后一个节点和首节点做差补充到DefineFont3字形信息中。
[0045] 本发明通过从svg图形描述文档中读取相应的节点,将节点的相关字体信息转换为swf文件中DefineFont3节点的对应属性,构建包含自字体定义类DoAbc节点,建立所述字体定义类和所述DefineFont3节点的关联,在内存中将这些信息动态拼接并加上其他相关节点,构建一个完整的swf文件,将该文件交由flash虚拟机解析,在内存中动态构建相应的swf字体库,借由flash虚拟机实现了flash平台下对svg字体进行不失真的渲染,从而在虚拟机层面上实现字体的应用,As3脚本只需使用少量代码即可实现相应字体的应用,相对于传统的As3脚本绘制的方法性能更高。
[0046] 如图5所示,根据本发明的另一面,还提供一种渲染字体的系统,包括字体信息提取模块1、节点构建模块2、关联模块3、补充模块4、加载模块5、flash虚拟机6及指定模块7。
[0047] 字体信息提取模块1用于As3脚本对Svg文档进行解析,找到字体的相关节点,并提取所述相关节点中的字体信息,具体的,所述字体信息提取模块1找到的所述节点包括defs中的font节点的font-face子节点和glyph节点,其中所述字体信息提取模块1提取的字体信息包括所述font-face子节点中的ascent和descent字体度量信息及每em的单位划分;所述字体信息提取模块提取的字体信息包括所述glyph节点中的字体的unicode编码、水平方向的advance值以及字形信息。
[0048] 节点构建模块2用于根据所述字体信息按照swf文件格式规范构建DefineFont3节点、DefineFontName节点、及包含一字体定义类的DoAbc节点。
[0049] 关联模块3用于过SymbolClass节点建立所述字体定义类与DefineFont3及DefineFontName节点的关联,具体的,所述DefineFont3包括字体的最后一个节点和首节点的差值。
[0050] 补充模块4用于在所述关联的基础上构建完整的swf字体库。
[0051] 加载模块5用于As3脚本加载所述swf字体库交由flash虚拟机6解析。
[0052] flash虚拟机6用于解析所述swf字体库生成嵌入字体。
[0053] 指定模块7用于As3脚本指定所述嵌入字体及其字体名称。
[0054] 综上所述,本发明通过As3脚本对Svg文档进行解析,找到字体的相关节点,并提取所述相关节点中的字体信息,根据所述字体信息按照swf文件格式规范构建DefineFont3节点、DefineFontName节点、及包含一字体定义类的DoAbc节点,通过SymbolClass节点建立所述字体定义类与DefineFont3及DefineFontName节点的关联,在所述关联的基础上构建完整的swf字体库,As3脚本加载所述swf字体库交由flash虚拟机解析,所述flash虚拟机生成嵌入字体,As3脚本指定所述嵌入字体及其字体名称,从而借由flash虚拟机实现了flash平台下对svg字体进行不失真的渲染,在虚拟机层面上实现字体的应用,而且As3脚本只需使用少量代码即可实现相应字体的应用,相对于传统的As3脚本绘制的方法性能更高。
[0055] 本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的系统而言,由于与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。
[0056] 专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
[0057] 显然,本领域的技术人员可以对发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包括这些改动和变型在内。