一种文本渲染方法、装置、电子设备和存储介质与流程

文档序号:33650810发布日期:2023-03-29 08:20阅读:48来源:国知局
一种文本渲染方法、装置、电子设备和存储介质与流程

1.本公开涉及人工智能技术领域,尤其涉及计算机视觉、增强现实、虚拟现实等技术领域。


背景技术:

2.文本中一般包括一个或者多个字符,对文本进行渲染时需要对文本中的字符进行渲染。对字符进行渲染时,需要基于字体文件对字符进行渲染。
3.在多语言环境中,文本中可能会包含多种语言下的字符,由于每种语言对应不同的字体文件,因此,在渲染文本中不同语言下的字符时,需要切换字体文件。这样对于同一字体文件而言需要被反复加载和卸载。


技术实现要素:

4.本公开提供了一种文本渲染方法、装置、电子设备和存储介质。
5.根据本公开的一方面,提供了一种文本渲染方法,包括:
6.在字体数据缓存包括的默认字体数据和个性字体数据中,查找文本中待渲染字符的目标字体数据;
7.若查找结果表征字体数据缓存中不存在所述目标字体数据,从预先构建的组合字体数据群中获得所述待渲染字符的字体数据,根据所获得的字体数据确定所述目标字体数据,并根据所获得的字体数据更新所述字体数据缓存,其中,所述组合字体数据群包括:默认字体数据子群和个性字体数据子群;
8.基于所述目标字体数据,对所述待渲染字符进行渲染。
9.根据本公开的另一方面,提供了一种文本渲染装置,包括:
10.目标数据查找模块,用于在字体数据缓存包括的默认字体数据和个性字体数据中,查找文本中待渲染字符的目标字体数据;若查找结果表征字体数据缓存中不存在所述目标字体数据,触发目标数据获得模块;
11.目标数据获得模块,用于从预先构建的组合字体数据群中获得所述待渲染字符的字体数据,根据所获得的字体数据确定所述目标字体数据,并根据所获得的字体数据更新所述字体数据缓存,其中,所述组合字体数据群包括:默认字体数据子群和个性字体数据子群;
12.字符渲染模块,用于基于所述目标字体数据,对所述待渲染字符进行渲染。
13.根据本公开的再一方面,提供了一种电子设备,包括:
14.至少一个处理器;以及
15.与所述至少一个处理器通信连接的存储器;其中,
16.所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行上述文本渲染方法。
17.根据本公开的又一方面,提供了一种存储有计算机指令的非瞬时计算机可读存储
介质,其中,所述计算机指令用于使所述计算机执行上述文本渲染方法。
18.根据本公开的又一方面,提供了一种计算机程序产品,包括计算机程序,所述计算机程序在被处理器执行时实现上述文本渲染方法。
19.由以上可见,本公开实施例提供的方案中,在渲染文本中字符的过程中,从字体数据缓存中查找文本中待渲染字符的目标字体数据,若未查找到,根据从预先构建的组合字体数据群中获得的字体数据确定目标字体数据,并根据所获得的字体数据更新上述字体数据缓存,基于目标字体数据对字符进行渲染。由于上述更新字体数据缓存所依据的字体数据是从包含默认字体和个性字体的组合字体中获得的,所以字体数据缓存中存有当前待渲染字符的多种字体数据,当再次对已进行过渲染的字符进行渲染时,在字体数据缓存中可以查找到该字符的同一字体数据,也可以查找到该字符的其它字体数据。这样,在渲染文本中不同语言下或者不同字体下的字符时,字体数据的切换可以不需要进行字体数据的反复加载和卸载,而是从缓存中获取所需的字体数据,减少了算力消耗,提高文本渲染效率。
20.应当理解,本部分所描述的内容并非旨在标识本公开的实施例的关键或重要特征,也不用于限制本公开的范围。本公开的其它特征将通过以下的说明书而变得容易理解。
附图说明
21.附图用于更好地理解本方案,不构成对本公开的限定。其中:
22.图1是本公开实施例提供的一种组合字体数据群的示意图;
23.图2是本公开实施例提供的一种文本渲染方法的流程示意图;
24.图3是本公开实施例提供的另一种文本渲染方法的流程示意图;
25.图4是本公开实施例提供的一种字体数据缓存更新方法的流程示意图;
26.图5是本公开实施例提供的另一种字体数据缓存更新方法的流程示意图;
27.图6是本公开实施例提供的一种字体数据获得方法的流程示意图;
28.图7是本公开实施例提供的一种对待渲染字符进行渲染的方法的流程示意图;
29.图8是本公开实施例提供的一种文本渲染装置的结构示意图;
30.图9是用来实现本公开实施例的文本渲染方法的电子设备的框图。
具体实施方式
31.以下结合附图对本公开的示范性实施例做出说明,其中包括本公开实施例的各种细节以助于理解,应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认识到,可以对这里描述的实施例做出各种改变和修改,而不会背离本公开的范围和精神。同样,为了清楚和简明,以下的描述中省略了对公知功能和结构的描述。
32.下面对本公开实施例中涉及的概念进行描述。
33.一、字体数据
34.每一个字符均可以基于不同的字体进行渲染,例如,字符1可以基于宋体渲染,也可以基于楷体渲染。在不同的字体下,字符的渲染效果不同,相应的,也就是,在不同字体下渲染字符所使用的数据不同,本公开实施例中,将在一种字体下渲染某一个字符时所使用的数据称为该字符在该字体下的字体数据。字体数据可以是矢量数据,也可以是栅格数据。
35.二、组合字体数据群
36.组合字体数据群是字体数据的集合。组合字体数据群可以按照字体进一步划分为多个子群。例如,组合字体数据群可以包括默认字体数据子群和个性字体数据子群。其中,默认字体数据子群可以包括:默认情况下对字符进行渲染时字符对应的字体数据,可以将该子群中包括的字体数据称为默认字体数据。个性字体数据子群可以包括:个性化设置情况下对字符进行渲染时字符对应的字体数据,可以将该子群中包括的字体数据称为个性字体数据。
37.默认字体数据子群和个性字体数据子群中均可以包括一种字体下字符对应的字体数据,也可以包括多种字体下字符对应的字体数据。相应的,可以将默认字体数据子群中字体数据对应的字体称为默认字体,将个性字体数据子群中字体数据对应的字体称为个性字体。
38.另外,对于一种字体而言,默认字体数据子群和个性字体数据子群中可以包括该字体下多个字符对应的字体数据。组合字体数据群中可以包括多个个性字体数据子群,不同的个性字体数据子群可以包括不同字体的字体数据。
39.再者,还可以为个性字体数据子群设置字符范围,也就是,个性字体数据子群中包括所设置字符范围内的字符对应的字体数据。
40.具体的,参见图1,结合上述情况示出了一种组合字体数据群的示意图。
41.三、字体数据缓存
42.字体数据缓存为缓存中用于缓存字体数据的区域。
43.字体数据缓存中可以缓存有默认字体数据和个性字体数据,也就是,缓存有来自上述默认字体数据子群的数据和来自上述个性字体数据子群的数据。
44.四、字体的属性
45.字体的属性可以包括以下信息中的至少一种:字体是否为粗体、字体是否为斜体、斜体的种类、字体的颜色、字体的名称、字体的间距、字体的高度和宽度等与字体相关的信息。
46.下面对本公开实施例所提供方案的执行主体进行说明。
47.本公开实施例所提供方案的执行主体可以是用于渲染的台式计算机、笔记本电脑、服务器等等电子设备,为便于表述,将该电子设备称为渲染设备。
48.下面通过具体实施例对本公开实施例提供的文本渲染方法进行详细说明。
49.本公开的一个实施例中,参见图2,图2提供了一种文本渲染方法的流程示意图。上述方法包括以下步骤s201-s203。
50.步骤s201:在字体数据缓存包括的默认字体数据和个性字体数据中,查找文本中待渲染字符的目标字体数据。
51.文本中包括的字符可以是中文字符、英文字符、法文字符等等各种语言下的字符。
52.一种实现方式中,在查找文本中待渲染字符的目标字体数据之前,渲染设备可以对各个待渲染字符进行字符转换。例如,一个英文字符需要占用8位,一个中文字符需要占用16位,那么进行字符转换的具体过程可以是将英文字符也调整为16位的字符,这样可以统一数据格式,便于进行文本渲染。
53.另一种实现方式中,渲染设备可以根据待渲染字符的字体属性中记录的字体名称和字符,遍历各个字体数据缓存中的默认字体数据和个性字体数据,查找文本中待渲染字
符的目标字体数据。
54.步骤s201的其它实现方式将在下文实施例中进行说明,这里暂不详述。
55.下面对从字体数据缓存中获得目标字体数据的实现方式进行说明。
56.一种实现方式中,若在上述步骤s201查找到目标字体数据,则渲染设备可以根据上述步骤s201查找到的数据在缓存中的地址从字体数据缓存中获得目标字体数据。
57.另一种实现方式中,渲染设备可以为各个字体数据赋予唯一标识,若在步骤s201中查找到目标字体数据,可以记录目标字体数据的目标标识,在字体数据缓存中遍历各个字体数据的标识,获得目标标识所属的目标字体数据。
58.一种情况下,若在字体数据缓存中查找到待渲染字符的目标字体数据,则执行步骤s203,反之,若在字体数据缓存中未查找到待渲染字符的目标字体数据,也就是,查找结果表征字体数据缓存中不存在目标字体数据,则执行步骤s202。
59.步骤s202:若查找结果表征字体数据缓存中不存在目标字体数据,从预先构建的组合字体数据群中获得待渲染字符的字体数据,根据所获得的字体数据确定目标字体数据,并根据所获得的字体数据更新字体数据缓存。
60.其中,组合字体数据群包括:默认字体数据子群和个性字体数据子群。
61.组合字体数据群中包括默认字体数据子群和个性字体数据子群,在获得待渲染字符的字体数据时,可以既在个性字体数据子群中查找待渲染字符的字体数据,也在默认字体数据子群中查找待渲染字符的字体数据。
62.一种情况下,在默认字体数据子群中查找待渲染字符的字体数据,上述获得的字体数据可以包括从组合字体数据群中默认字体数据子群获得的默认字体数据。在这种情况下,根据获得的字体数据确定目标字体数据可以是将获得的默认字体数据作为目标字体数据。
63.另一种情况下,既在个性字体数据子群中查找待渲染字符的字体数据,也在默认字体数据子群中查找待渲染字符的字体数据,上述获得的字体数据可以还可以包括从组合字体数据群中个性字体数据子群获得的个性字体数据。在这种情况下,根据获得的字体数据确定目标字体数据可以是将获得的个性字体数据作为目标字体数据。若上述获得的字体数据包括默认字体数据和个性字体数据,可以优先将个性字体数据作为目标数据,在个性字体数据难以满足字符的属性的情况下,可以将默认字体数据作为目标数据。
64.具体的,根据所获得的字体数据更新字体数据缓存,可以是将获得的该待渲染字符对应的字体数据缓存至字体数据缓存中。
65.步骤s202的其它实现方式将在下文实施例的步骤s406-s407中进行说明,这里暂不详述。
66.步骤s203:基于目标字体数据,对待渲染字符进行渲染。
67.由于文本中可能包含一个字符,也可能包含多个字符,在进行字符渲染时,一种实现方式中,可以在根据前述步骤每得到一个字符的目标字体数据后,即对该字符进行渲染,如此循环,完成文本中各个字符的渲染后,即完成了对整个文本的渲染;另一种实现方式中,可以在根据前述步骤得到文本中所有字符的目标字体数据后,再对各个字符进行渲染,从而完成对整个文本的渲染。
68.对待渲染字符进行渲染的具体实现方式可以参见后续图7所示实施例,这里暂不
详述。
69.由以上可见,本公开实施例提供的方案中,在渲染文本中字符的过程中,从字体数据缓存中查找文本中待渲染字符的目标字体数据,若未查找到,根据从预先构建的组合字体数据群中获得的字体数据确定目标字体数据,并根据所获得的字体数据更新上述字体数据缓存,基于目标字体数据对字符进行渲染。由于上述更新字体数据缓存所依据的字体数据是从包含默认字体和个性字体的组合字体中获得的,所以字体数据缓存中存有当前待渲染字符的多种字体数据,当再次对已进行过渲染的字符进行渲染时,在字体数据缓存中可以查找到该字符的同一字体数据,也可以查找到该字符的其它字体数据。这样,在渲染文本中不同语言下或者不同字体下的字符时,字体数据的切换可以不需要进行字体数据的反复加载和卸载,而是从缓存中获取所需的字体数据,减少了算力消耗,提高文本渲染效率。
70.另外,本公开实施例提供的方案中,针对已渲染过的字符切换字体可以从缓存中直接获得所需的字体数据。可以适配多语言、多风格环境。这样,不用重复的加载和卸载各种字体文件,减少了业务复杂性、减小了包体大小。由于组合字体群是预先构建的,这样可以对字体数据进行离线烘焙,从而使用已烘焙的字体数据可以更快的进行渲染,加快渲染显示速度,提高渲染效率。
71.下面结合两个实施例对步骤s201的实现方式进行说明。
72.实施例一
73.本公开的一个实施例中,步骤s201可以通过以下步骤a-c实现。
74.步骤a:确定文本中待渲染字符所属的目标字符分类。
75.一种实现方式中,可以通过不同的字符范围对不同的字符进行字符分类,例如,设定字符范围1内的字符为字符分类1,字符范围2内字符为字符分类2。那么,可以获得待渲染字符的所属字符范围来确定字符所属的字符分类。
76.例如,可以将字符分为两类:ascii字符和其它字符。若确定文本中待渲染字符所属的字符区间为ascii字符区间,则确定ascii字符为目标字符分类,若确定文本中待渲染字符所属的字符区间不为ascii字符区间,则确定其它字符为目标字符分类。
77.步骤b:确定字体数据缓存中用于缓存目标字符分类对应的字体数据的缓存区间。
78.在字体数据缓存中可以为上述各个字符分类分配不同的缓存区间并保留映射关系,当确定目标字符分类后,可以根据预先设定的映射关系,确定为该目标字符分类预先分配的缓存区间。
79.步骤c:在上述缓存区间包括的默认字体数据和个性字体数据中,查找文本中待渲染字符的目标字体数据。
80.例如,若确定待渲染字符的目标字符分类为ascii字符,并且预先为ascii字符分配的缓存区间为字体数据缓存中的缓存区间1,则确定缓存区间1为目标字符分类对应的字体数据的缓存区间。那么渲染设备可以在缓存区间1中的默认字体数据和个性字体数据中,查找文本中待渲染字符的目标字体数据。
81.由以上可见,为字体数据缓存设置字符分类,可以通过确定文本中待渲染字符所属的目标字符分类,在目标字符分类中查找目标字体数据,可以不用再从数据量较大的字体数据缓存的所有缓存数据中查找目标字体数据,可以从更准确、数据量更小的目标字符分类对应的缓存区间查找目标字体数据,这样可以减少算力消耗,加快查找速度,进而加快
渲染效率。
82.实施例二
83.本公开的另一个实施例中,参见图3,图3提供了另一种文本渲染方法的流程示意图。上述方法包括以下步骤s301-s305。其中,上述步骤s201还可以通过步骤s301-s302实现。
84.步骤s301:在各个性字体对应的字符范围中,确定包括文本中待渲染字符的第一字符范围。
85.其中,上述个性字体数据子群中可以设置有对应的字符范围,鉴于此,各个性字体对应的字符范围可以通过读取个性字体数据子群设置的字符范围获得,个性字体对应的字符范围表示在该字符范围内的字符应使用上述字符范围对应的个性字体。
86.一种实现方式中,渲染设备可以根据上述个性字体数据子群设置的字符范围,获得文本中待渲染字符所属的个性字体对应的字符范围,作为第一字符范围。
87.另一种实现方式中,渲染设备可以在上述个性字体数据子群设置的字符范围中,确定包括文本中待渲染字符的第一字符范围。
88.若渲染设备确定文本中待渲染字符不在任何个性字体对应的字符范围中,则认为未能在个性字体中查找到待渲染字符的字体数据,执行步骤s302。
89.步骤s302:若字体数据缓存中第一字符范围对应的第一缓存区域不存在待渲染字符的字体数据,在字体数据缓存包括的默认字体数据中,查找目标字体数据。
90.其中,第一缓存区域,用于缓存对应的个性字体下第一字符范围内字符的个性字体数据。
91.随着缓存设备对文本中各个字符进行渲染,能够不断获得第一字符范围内新字符的个性字体数据,然后也就会不断的缓存所获得的个性字体数据,从而建立第一字符范围与第一缓存区域之间的对应关系。当然,随着新字符的个性字体数据被缓存,第一缓存区域也在不断被更新,第一字符范围与第一缓存区域之间的对应关系也不断被更新。
92.下面对查找待渲染字符的字体数据的实现方式进行说明。
93.一种实现方式中,通过上述第一字符范围和第一缓存区域之间的对应关系,渲染设备可以确定用于缓存当前待渲染字符个性字体数据的第一子缓存区域,从上述第一子缓存区域中查找个性字体数据。
94.另一种实现方式中,可以通过在字体数据缓存中第一字符范围对应的第一缓存区域,根据待渲染字符的字体属性中记录的字体名称,查找待渲染字符的字体数据。
95.具体的,渲染设备使用待渲染字符的字体名称在第一缓存区域中遍历各个字体数据,查找第一缓存区域字体数据为待渲染字符的字体名称的字体数据。可见,通过待渲染字符的字体属性中记录的字体名称,可以快速的、准确的查找到待渲染字符对应的字体数据。
96.由于缓存中的个性字体数据是在先前渲染过程中作为已渲染字符的目标字体数据更新到字体数据缓存中的,若能通过字符范围和缓存区域的对应关系查找得到,说明上述得到的个性字体数据可以被直接确定为当前待渲染字符的目标字体数据。
97.下面对在字体数据缓存包括的默认字体数据中,查找目标字体数据的实现方式进行说明。
98.一种实现方式中,渲染设备可以根据待渲染字符的字体属性中记录的字体名称,
在默认字体数据中查找上述待渲染字符的字体数据。
99.若在步骤s302中未查找到目标字体数据,说明在字体数据缓存中不存在目标字体数据,则执行步骤s303。也就是说,若在字体数据缓存包括的默认字体数据中未查找到目标字体数据,则查找结果表征了字体数据缓存中不存在目标字体数据。
100.一种情况下,若在默认字体数据中查找到上述待渲染字符的字体数据,则将默认字体数据中查找到的待渲染字符的字体数据作为目标字体数据,执行步骤s304。
101.另一种情况,若第一字符范围对应的第一缓存区域中存在待渲染字符的字体数据,则将第一缓存区域中存在的待渲染字符的字体数据确定为目标字体数据,并执行下述步骤s304。
102.步骤s302的实现方式将在下文实施例中进行说明,这里暂不详述。
103.步骤s303:从预先构建的组合字体数据群中获得待渲染字符的字体数据。
104.由于字体数据缓存中不包含待渲染字符的字体数据,所以需要从预先构建的组合字体数据群中获得待渲染字符的字体数据。
105.步骤s303的一些实现方式与步骤s202相似,这里不再详述。
106.步骤s303的其它实现方式将在下文实施例中进行说明,这里暂不详述。
107.步骤s304:根据所获得的字体数据确定目标字体数据,并根据所获得的字体数据更新字体数据缓存。
108.步骤s304的一些实现方式与上述步骤s202相似,这里不再详述。
109.在更新字体数据缓存时,不仅可以将字体数据更新至指定区域,还可以更新字符范围和缓存区域的对应关系。
110.步骤s304的其他实现方式将在下文实施例中进行说明,这里暂不详述。c
111.步骤s305:基于目标字体数据,对待渲染字符进行渲染。
112.步骤s305与步骤s203的实现方式相同,这里不再详述。
113.由以上可见,在查找文本中待渲染字符的目标字体数据的过程中,先通过在第一字符范围与第一缓存区域查找待渲染字符的字体数据,在不存在待渲染字符的字体数据情况下,在字体数据缓存包括的默认字体数据中查找目标字体数据,可以在更小的范围内进行查找,加快检索速度,在字体数据缓存中的数据量较大的情况下,渲染设备可以更快的找到目标字体数据,提高渲染效率。
114.下面对步骤s304的实现方式进行说明。
115.一种实现方式中,参见图4,图4提供了一种字体数据缓存更新方法的流程示意图。上述步骤s304可以通过以下步骤s401-s402实现。
116.步骤s401:将所获得的字体数据中属于个性字体数据子群的数据缓存至第一缓存区域。
117.在从个性字体数据子群获得字体数据的过程中,渲染设备可以记录各个字体数据与个性字体数据子群的对应关系。通过对应关系,获得字体数据所属个性字体数据子群。例如,渲染设备可以为字体数据中各个数据设置标识,从个性字体数据子群获得字体数据后,可以记录标识与个性字体数据子群的关系,这样,渲染设备可以通过读取各个字体数据的标识,获得字体数据中属于个性字体数据子群的数据。
118.下面对将数据缓存至第一缓存区域的实现方式进行说明。
119.具体的,可以将属于个性字体数据子群的字体数据缓存至第一缓存区域的数据尾,也可以将字体数据缓存第一缓存区域的预设位置。
120.步骤s402:在字体数据缓存中缓存所获得的字体数据中属于默认字体数据子群的数据。
121.与上述步骤s401相似,渲染设备也可以在从默认字体数据子群获得字体数据的过程中,记录各个字体数据与默认字体数据子群的对应关系。通过对应关系,获得字体数据所属默认字体数据子群。
122.下面对在字体数据缓存中缓存字体数据的实现方式进行说明。
123.具体的,渲染设备可以将上述属于默认字体数据子群的数据缓存在字体数据缓存中的任一缓存区域,也可以将上述属于默认字体数据子群的数据缓存在字体数据缓存中指定的缓存区域,例如,可以缓存至字体数据缓存中用于缓存默认字体数据的第三缓存区域。
124.当将它们分别更新到字体数据缓存中后,后续渲染字符的过程可以从缓存中获取上述字体数据。
125.可见,将所获得的个性字体数据子群的数据更新至第一缓存区域,将属于默认字体数据子群的数据更新至字体数据缓存,可以便于后续的字符渲染过程中在字体数据缓存获得目标字体数据,加快字体数据获得速度,提高渲染效率。
126.另一种实现方式中,参见图5,图5提供了另一种字体数据缓存更新方法的流程示意图。上述步骤s304还可以包括以下步骤s501-s502实现。
127.步骤s501:确定所获的字体数据中个性字体数据对应的目标个性字体。
128.一种方式中,可以根据个性字体数据的字体名称,从个性字体数据群中确定目标个性字体。
129.步骤s502:根据所获得的字体数据中的个性字体数据更新目标个性字体对应的第二字符范围,并根据所获得的字体数据中个性字体数据在字体数据缓存中的缓存位置,更新第二字符范围对应的第二缓存区域。
130.一种方式中,根据个性字体数据的字体名称,从个性字体数据子群中确定目标个性字体对应的第二字符范围,建立第二字符范围与个性字体数据在字体数据缓存中的缓存位置的对应关系,将上述缓存位置更新为第二字符范围对应的第二缓存区域。
131.下面对更新第二字符范围和第二缓存区域的实现方式进行说明。
132.将当前目标个性字体对应的第二字符范围更新至字体数据缓存中已缓存的个性字体对应的第二字符范围,将个性字体数据的缓存位置的地址范围更新到第二缓存区域。例如,字体数据缓存中已缓存的个性字体对应的第二字符范围为1-1000,当前目标个性字体对应的第二字符范围为1001-2000,更新后的第二字符范围为1-2000。
133.可见,根据所获的字体数据中个性字体数据对应的目标个性字体的第二字符范围,以及个性字体数据在字体数据缓存中的缓存位置,更新第二字符范围对应的第二缓存区域,这样,在后续的字符渲染过程中,当待渲染字符属于存在缓存区域对应关系的字符范围中时,可以直接在字符范围对应的缓存区域中查找到字体文件,提高查找字体文件的检索速度,提高渲染效率。
134.下面对步骤s304的实现方式进行说明。
135.一种实现方式中,步骤s304可以通过以下步骤d-e实现。
136.步骤d:获得上述文本的默认字体属性集。
137.渲染设备可以通过文本中的默认字体数据,获得默认字体属性集,也就是,默认字体中属性的合集。渲染设备也可以构建各个默认字体属性和默认字体的映射关系。
138.步骤e:在字体数据缓存包括的默认字体数据中,根据上述默认字体属性集,查找与待渲染字符相匹配的目标字体数据。
139.其中,相匹配的目标字体数据可以表征其属性与待渲染字符的字体属性相匹配的目标字体数据。
140.一种方式中,默认字体数据子群中的默认字体数据包含多种默认字体,所以根据上述默认字体属性集查找与待渲染字符的属性相匹配的目标字体数据。
141.可见,通过获得默认字体属性集,并根据默认字体属性集从默认字体数据查找的目标字体数据,可以使待渲染字符尽可能找到与自身属性更加匹配的字体数据,提高文本渲染效果。
142.下面对步骤s303的实现方式进行说明。
143.一种实现方式中,参见图6,图6提供了一种字体数据获得方法的流程示意图。步骤s303可以通过以下步骤s601-s603实现。
144.步骤s601:确定个性字体数据子群对应的字符范围中包括待渲染字符的目标个性字体数据子群。
145.一种方式中,个性字体数据子群可以包括该子群中个性字体数据对应的字符范围。渲染设备可以遍历各个个性字体数据子群对应的字符范围,确定待渲染字符的所属字符范围,作为目标个性字体数据子群。
146.步骤s602:从目标个性字体数据子群中获得待渲染字符的字体数据。
147.步骤s603:从默认字体数据子群中获得待渲染字符的字体数据。
148.步骤s602-s603需要从组合字体数据群中的目标个性字体数据子群和默认字体数据子群中获得字体数据,从目标个性字体数据子群中获得的待渲染字符的字体数据可以优先为待渲染字体提供个性字体,从默认字体数据子群中获得的待渲染字符的字体数据可以保证该字符能够留有用于渲染的字体数据。
149.一种实现方式中,渲染设备可以根据待渲染字符的字体属性,在目标个性字体数据子群或默认字体数据子群中获得与上述字体属性相符合的字体数据。
150.这样,从组合字体数据群包括的默认字体数据子群和个性字体数据子群获得字体数据,既优先保证待渲染字符能够被个性化字体渲染,又保证了待渲染字符能够被正确地渲染,减少渲染错误的情况。
151.下面对待渲染字符进行渲染的具体实现方式进行说明。
152.一种实现方式中,参见图7,图7提供了一种字符渲染方法的流程示意图。应该方法可以实现对待渲染字符的渲染,具体的,上述字符渲染方法包括以下步骤s701-s705。
153.步骤s701:根据待渲染字符、待渲染字符的属性和目标字体数据,生成渲染数据。
154.在对字符进行渲染时,由gpu完成,而gpu一般是按照一定格式获得待渲染的数据,并对所获得的数据进行渲染的,鉴于此,本步骤中,可以对待渲染字符、待渲染字符的属性以及目标字符数据按照gpu需要的格式进行封装,从而得到渲染数据。
155.步骤s702:根据上述渲染数据生成字体纹理数据。
156.一种方式中,可以根据上述渲染数据生成字符的纹理、纹理uv(坐标u和坐标v构成的纹理坐标)数据和尺寸作为字体纹理数据。进一步的,在上述方式的基础上,渲染设备还可以为字体纹理数据构建字体纹理集,将已生成的字体纹理数据缓存下来,当再次需要已生成的纹理时,可以从字体纹理集中获得所需的字体纹理数据。这样可以减少生成字体纹理数据的算力消耗,提高渲染效率。
157.步骤s703:根据上述渲染数据和字体纹理数据,构造字符数据。
158.其中,字符数据是用于渲染显示字符的数据,可以直接用于进行字符渲染。
159.由于上述字体纹理数据能够反映待渲染字符在文本的所有字符中的位置,因此,可以按照上述字体纹理数据确定该渲染字符的渲染数据与其它字符的渲染数据之间的位置关系,从而构造字符数据。
160.进一步的,在上述步骤s703的基础上,渲染设备也可以对字符数据进行缓存,当再次对同一字符且同一字体属性的字符进行渲染时,可以直接在缓存中获得该字符的字符数据。
161.步骤s704:根据上述待渲染字符的属性,确定待渲染字符的渲染位置。
162.一种方式中,渲染设备可以根据上述待渲染字符的属性中的字符的显示宽度、边距以及段落格式,确定每一行显示的字符数。根据上述待渲染字符的属性中的字符的显示宽度、高度、边距和显示行间距等信息,确定显示行数。再根据字符顺序确定字符的渲染位置。
163.步骤s705:根据渲染位置、待渲染字符的属性和上述字符数据,对5待渲染字符进行渲染。
164.这样,在对待渲染字符进行渲染的过程中,先生成渲染数据,再根据渲染数据生成字体纹理数据,生成的字体纹理数据可以在其它字符的渲染过程重复使用,在构造字符数据前不必再生成字体纹理数据,提高渲染效率。
[0165][0166]
本公开的一个实施例中,若步骤s201通过步骤a-c实现,也可以结合上述步骤s201的实现方式中的实施例二来查找文本中待渲染字符的目标字体数据。
[0167]
步骤s301-s304可以是针对目标字符分类下的字体数据缓存进行查找。5具体的,在目标字符分类下的缓存区间包括的默认字体数据和个性字体数据中,执行步骤s301-s304。
[0168]
本公开的一个实施例中,参见图8,图8提供了一种文本渲染装置的结构示意图。上述装置包括:
[0169]
目标数据查找模块801,用于在字体数据缓存包括的默认字体数据和个性字体数据中,查找文本中待渲染字符的目标字体数据;若查找结果表征字体数据缓存中不存在目标字体数据,触发目标数据获得模块802;
[0170]
目标数据获得模块802,用于从预先构建的组合字体数据群中获得上述待渲染字符的字体数据,根据所获得的字体数据确定上述目标字体数据,5并根据所获得的字体数据更新上述字体数据缓存,其中,上述组合字体数据群包括:默认字体数据子群和个性字体数据子群;
[0171]
字符渲染模块803,用于基于上述目标字体数据,对上述待渲染字符进行渲染。
[0172]
由以上可见,本公开实施例提供的方案中,在渲染文本中字符的过程中,从字体数据缓存中查找文本中待渲染字符的目标字体数据,若未查找到,根据从预先构建的组合字体数据群中获得的字体数据确定目标字体数据,并根据所获得的字体数据更新上述字体数据缓存,基于目标字体数据对字符进行渲染。由于上述更新字体数据缓存所依据的字体数据是从包含默认字体和个性字体的组合字体中获得的,所以字体数据缓存中存有当前待渲染字符的多种字体数据,当再次对已进行过渲染的字符进行渲染时,在字体数据缓存中可以查找到该字符的同一字体数据,也可以查找到该字符的其它字体数据。这样,在渲染文本中不同语言下或者不同字体下的字符时,字体数据的切换可以不需要进行字体数据的反复加载和卸载,而是从缓存中获取所需的字体数据,减少了算力消耗,提高文本渲染效率。
[0173]
本公开的一个实施例中,上述目标数据查找模块801,包括:
[0174]
第一字符范围确定单元,用于在各个性字体对应的字符范围中,确定包括文本中待渲染字符的第一字符范围;
[0175]
目标数据查找单元,用于在上述字体数据缓存中上述第一字符范围对应的第一缓存区域不存在上述待渲染字符的字体数据的情况下,在上述字体数据缓存包括的默认字体数据中,查找目标字体数据,其中,上述第一缓存区域,用于缓存对应的个性字体下上述第一字符范围内字符的个性字体数据。
[0176]
由以上可见,在查找文本中待渲染字符的目标字体数据的过程中,先通过在第一字符范围与第一缓存区域查找待渲染字符的字体数据,在不存在待渲染字符的字体数据情况下,在字体数据缓存包括的默认字体数据中查找目标字体数据,可以在更小的范围内进行查找,加快检索速度,在字体数据缓存中的数据量较大的情况下,渲染设备可以更快的找到目标字体数据,提高渲染效率。
[0177]
本公开的一个实施例中,上述目标数据获得模块,具体用于:将所获得的字体数据中属于个性字体数据子群的数据缓存至上述第一缓存区域;在上述字体数据缓存中缓存所获得的字体数据中属于默认字体数据子群的数据。
[0178]
可见,将所获得的个性字体数据子群的数据更新至第一缓存区域,将属于默认字体数据子群的数据更新至字体数据缓存,可以便于后续的字符渲染过程中在字体数据缓存获得目标字体数据,加快字体数据获得速度,提高渲染效率。
[0179]
本公开的一个实施例中,上述装置还包括:
[0180]
目标个性字体确定模块,用于确定所获的字体数据中个性字体数据对应的目标个性字体;
[0181]
字符范围和缓存区域更新模块,用于根据所获得的字体数据中的个性字体数据更新上述目标个性字体对应的第二字符范围,并根据所获得的字体数据中个性字体数据在上述字体数据缓存中的缓存位置,更新上述第二字符范围对应的第二缓存区域。
[0182]
可见,根据所获的字体数据中个性字体数据对应的目标个性字体的第二字符范围,以及个性字体数据在字体数据缓存中的缓存位置,更新第二字符范围对应的第二缓存区域,这样,在后续的字符渲染过程中,当待渲染字符属于存在缓存区域对应关系的字符范围中时,可以直接在字符范围对应的缓存区域中查找到字体文件,提高查找字体文件的检索速度,提高渲染效率。
[0183]
本公开的一个实施例中,按照以下方式在上述字体数据缓存中第一字符范围对应
的第一缓存区域,查找上述待渲染字符的字体数据:
[0184]
在上述字体数据缓存中上述第一字符范围对应的第一缓存区域,根据上述待渲染字符的字体属性中记录的字体名称,查找上述待渲染字符的字体数据。
[0185]
可见,通过待渲染字符的字体属性中记录的字体名称,可以快速的、准确的查找到待渲染字符对应的字体数据。
[0186]
本公开的一个实施例中,上述字体数据查找单元,具体用于:获得上述文本的默认字体属性集;在上述字体数据缓存包括的默认字体数据中,查找与上述默认字体属性集相匹配的上述目标字体数据。
[0187]
可见,通过获得默认字体属性集,并根据默认字体属性集从默认字体数据查找的目标字体数据,可以使待渲染字符尽可能找到与自身属性更加匹配的字体数据,提高文本渲染效果。
[0188]
本公开的一个实施例中,上述目标数据获得模块,具体用于:确定个性字体数据子群对应的字符范围中包括上述待渲染字符的目标个性字体数据子群;从上述目标个性字体数据子群中获得上述待渲染字符的字体数据;从上述默认字体数据子群中获得上述待渲染字符的字体数据。
[0189]
这样,从组合字体数据群包括的默认字体数据子群和个性字体数据子群获得字体数据,既优先保证待渲染字符能够被个性化字体渲染,又保证了待渲染字符能够被正确地渲染,减少渲染错误的情况。
[0190]
本公开的一个实施例中,上述目标数据查找模块,具体用于:确定文本中待渲染字符所属的目标字符分类;确定字体数据缓存中用于缓存上述目标字符分类对应的字体数据的缓存区间;在上述缓存区间包括的默认字体数据和个性字体数据中,查找文本中待渲染字符的目标字体数据。
[0191]
由以上可见,为字体数据缓存设置字符分类,可以通过确定确定文本中待渲染字符所属的目标字符分类,在目标字符分类中查找目标字体数据,可以不用再从数据量较大的字体数据缓存的所有缓存数据中查找目标字体数据,可以从更准确、数据量更小的目标字符分类对应的缓存区间查找目标字体数据,这样可以减少算力消耗,加快查找速度,进而加快渲染效率。
[0192]
本公开的一个实施例中,上述字符渲染模块,具体用于:根据上述待渲染字符、待渲染字符的属性和上述目标字体数据,生成渲染数据;根据上述渲染数据生成字体纹理数据;根据上述渲染数据和字体纹理数据,构造字符数据;根据上述待渲染字符的属性,确定上述待渲染字符的渲染位置;根据上述渲染位置、上述待渲染字符的属性和上述字符数据,对上述待渲染字符进行渲染。
[0193]
这样,在对待渲染字符进行渲染的过程中,先生成渲染数据,再根据渲染数据生成字体纹理数据,生成的字体纹理数据可以在其它字符的渲染过程重复使用,在构造字符数据前不必再生成字体纹理数据,提高渲染效率。
[0194]
根据本公开的实施例,本公开还提供了一种电子设备、一种可读存储介质和一种计算机程序产品。
[0195]
图9示出了可以用来实施本公开的实施例的示例电子设备900的示意性框图。电子设备旨在表示各种形式的数字计算机,诸如,膝上型计算机、台式计算机、工作台、个人数字
助理、服务器、刀片式服务器、大型计算机、和其它适合的计算机。电子设备还可以表示各种形式的移动装置,诸如,个人数字处理、蜂窝电话、智能电话、可穿戴设备和其它类似的计算装置。本文所示的部件、它们的连接和关系、以及它们的功能仅仅作为示例,并且不意在限制本文中描述的和/或者要求的本公开的实现。
[0196]
如图9所示,设备900包括计算单元901,其可以根据存储在只读存储器(rom)902中的计算机程序或者从存储单元908加载到随机访问存储器(ram)903中的计算机程序,来执行各种适当的动作和处理。在ram 903中,还可存储设备900操作所需的各种程序和数据。计算单元901、rom 902以及ram 903通过总线904彼此相连。输入/输出(i/o)接口905也连接至总线904。
[0197]
设备900中的多个部件连接至i/o接口905,包括:输入单元906,例如键盘、鼠标等;输出单元907,例如各种类型的显示器、扬声器等;存储单元908,例如磁盘、光盘等;以及通信单元909,例如网卡、调制解调器、无线通信收发机等。通信单元909允许设备900通过诸如因特网的计算机网络和/或各种电信网络与其他设备交换信息/数据。
[0198]
计算单元901可以是各种具有处理和计算能力的通用和/或专用处理组件。计算单元901的一些示例包括但不限于中央处理单元(cpu)、图形处理单元(gpu)、各种专用的人工智能(ai)计算芯片、各种运行机器学习模型算法的计算单元、数字信号处理器(dsp)、以及任何适当的处理器、控制器、微控制器等。计算单元901执行上文所描述的各个方法和处理,例如文本渲染方法。例如,在一些实施例中,文本渲染方法可被实现为计算机软件程序,其被有形地包含于机器可读介质,例如存储单元908。在一些实施例中,计算机程序的部分或者全部可以经由rom 902和/或通信单元909而被载入和/或安装到设备900上。当计算机程序加载到ram 903并由计算单元901执行时,可以执行上文描述的文本渲染方法的一个或多个步骤。备选地,在其他实施例中,计算单元901可以通过其他任何适当的方式(例如,借助于固件)而被配置为执行文本渲染方法。
[0199]
本文中以上描述的系统和技术的各种实施方式可以在数字电子电路系统、集成电路系统、场可编程门阵列(fpga)、专用集成电路(asic)、专用标准产品(assp)、芯片上系统的系统(soc)、复杂可编程逻辑设备(cpld)、计算机硬件、固件、软件、和/或它们的组合中实现。这些各种实施方式可以包括:实施在一个或者多个计算机程序中,该一个或者多个计算机程序可在包括至少一个可编程处理器的可编程系统上执行和/或解释,该可编程处理器可以是专用或者通用可编程处理器,可以从存储系统、至少一个输入装置、和至少一个输出装置接收数据和指令,并且将数据和指令传输至该存储系统、该至少一个输入装置、和该至少一个输出装置。
[0200]
用于实施本公开的方法的程序代码可以采用一个或多个编程语言的任何组合来编写。这些程序代码可以提供给通用计算机、专用计算机或其他可编程数据处理装置的处理器或控制器,使得程序代码当由处理器或控制器执行时使流程图和/或框图中所规定的功能/操作被实施。程序代码可以完全在机器上执行、部分地在机器上执行,作为独立软件包部分地在机器上执行且部分地在远程机器上执行或完全在远程机器或服务器上执行。
[0201]
在本公开的上下文中,机器可读介质可以是有形的介质,其可以包含或存储以供指令执行系统、装置或设备使用或与指令执行系统、装置或设备结合地使用的程序。机器可读介质可以是机器可读信号介质或机器可读储存介质。机器可读介质可以包括但不限于电
子的、磁性的、光学的、电磁的、红外的、或半导体系统、装置或设备,或者上述内容的任何合适组合。机器可读存储介质的更具体示例会包括基于一个或多个线的电气连接、便携式计算机盘、硬盘、随机存取存储器(ram)、只读存储器(rom)、可擦除可编程只读存储器(eprom或快闪存储器)、光纤、便捷式紧凑盘只读存储器(cd-rom)、光学储存设备、磁储存设备、或上述内容的任何合适组合。
[0202]
为了提供与用户的交互,可以在计算机上实施此处描述的系统和技术,该计算机具有:用于向用户显示信息的显示装置(例如,crt(阴极射线管)或者lcd(液晶显示器)监视器);以及键盘和指向装置(例如,鼠标或者轨迹球),用户可以通过该键盘和该指向装置来将输入提供给计算机。其它种类的装置还可以用于提供与用户的交互;例如,提供给用户的反馈可以是任何形式的传感反馈(例如,视觉反馈、听觉反馈、或者触觉反馈);并且可以用任何形式(包括声输入、语音输入或者、触觉输入)来接收来自用户的输入。
[0203]
可以将此处描述的系统和技术实施在包括后台部件的计算系统(例如,作为数据服务器)、或者包括中间件部件的计算系统(例如,应用服务器)、或者包括前端部件的计算系统(例如,具有图形用户界面或者网络浏览器的用户计算机,用户可以通过该图形用户界面或者该网络浏览器来与此处描述的系统和技术的实施方式交互)、或者包括这种后台部件、中间件部件、或者前端部件的任何组合的计算系统中。可以通过任何形式或者介质的数字数据通信(例如,通信网络)来将系统的部件相互连接。通信网络的示例包括:局域网(lan)、广域网(wan)和互联网。
[0204]
计算机系统可以包括客户端和服务器。客户端和服务器一般远离彼此并且通常通过通信网络进行交互。通过在相应的计算机上运行并且彼此具有客户端-服务器关系的计算机程序来产生客户端和服务器的关系。服务器可以是云服务器,也可以为分布式系统的服务器,或者是结合了区块链的服务器。
[0205]
应该理解,可以使用上面所示的各种形式的流程,重新排序、增加或删除步骤。例如,本公开中记载的各步骤可以并行地执行也可以顺序地执行也可以不同的次序执行,只要能够实现本公开公开的技术方案所期望的结果,本文在此不进行限制。
[0206]
上述具体实施方式,并不构成对本公开保护范围的限制。本领域技术人员应该明白的是,根据设计要求和其他因素,可以进行各种修改、组合、子组合和替代。任何在本公开的精神和原则之内所作的修改、等同替换和改进等,均应包含在本公开保护范围之内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1