一种SVGA动画解析方法、装置及存储介质与流程

文档序号:17931881发布日期:2019-06-15 00:57阅读:877来源:国知局
一种SVGA动画解析方法、装置及存储介质与流程

本发明涉及数据解析领域,尤其涉及一种svga动画解析方法、装置及存储介质。



背景技术:

一般网页或视频界面上,常常可以见到炫酷的动画,这些动画多是由gif、属性动画、opengl加载以及svga等几种方式实现,前三种方案由于存在资源占用大或渲染效果差的问题,在视频直播动画中得到较少使用。

svga动画的原理是将svg格式的文件解析为关键帧、矢量路径及样式等数据然后作用于图片资源。svg文件是一种xml格式文件,目前常用的解析方案是采用dom解析或sax解析,当svg文件同时包含有关键帧、矢量路径和样式时,这两种方法都是按顺序依次进行解析,这样会导致解析效率较低,难以实现动画的实时展示。



技术实现要素:

有鉴于此,本发明实施例提供了一种svga动画解析方法、装置及存储介质,以保障svga动画的解析效率。

结合本发明实施例的第一方面,提供了一种svga动画解析方法,包括:

定义svga动画信息流中数据类型,其中,所述数据类型中包括开始元素和结束元素;

通过匹配预定字符查找开始元素和结束元素,以对所述svga动画信息流进行边界划分,并标记边界位置;

遍历所述svga动画信息流获取所有相邻边界中的数据区块,并行解析所述数据区块。

结合本发明实施例的第二方面,提供了一种微服务网关优化装置,包括:

定义模块,用于定义svga动画信息流中数据类型,其中,所述数据类型中包括开始元素和结束元素;

划分模块,用于通过匹配预定字符查找开始元素和结束元素,以对所述svga动画信息流进行边界划分,并标记边界位置;

解析模块,用于遍历所述svga动画信息流获取所有相邻边界中的数据区块,并行解析所述数据区块。

结合本发明实施例的第三方面,提供了一种装置,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如本发明实施例第一方面所述方法的步骤。

本发明实施例的第四方面,提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现本发明实施例第一方面提供的所述方法的步骤。

本发明实施例的第五方面,提供了一种计算机程序产品,所述计算机程序产品包括计算机程序,所述计算机程序被一个或多个处理器执行时实现本发明实施例第一方面提供的所述方法的步骤。

在本发明实施例中首先定义svga动画信息流的数据类型,再通过查找边界元素对信息流进行划分,最后获取边界间的内容数据区块进行并行解析。使得svg格式文件数据可以并行进行解析,保证关键帧、矢量路径和样式数据可以同步解析得到,从而,提高svga动画解析效率,实现视频动画的实时展示。同时,通过边界位置的标注,可以避免开辟新的缓存空间,可以减少内存占用。

附图说明

图1是本发明实施例一提供的一种svga动画解析方法的流程示意图;

图2是本发明实施例二提供的一种svga动画解析方法的另一流程示意图;

图3是本发明实施例三提供的一种svga动画解析方法的另一流程示意图;

图4是本发明实施例四提供的一种svga动画解析装置的结构示意图

图5是本发明实施例五提供的一种终端装置的结构示意图。

图6是本发明实施例提供的svga动画解析方法的性能测试图;

具体实施方式

本发明实施例提供了一种svga动画解析方法、装置及存储介质,用于解析svga动画,保证svg格式文件解析效率。

为使得本发明的发明目的、特征、优点能够更加的明显和易懂,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,下面所描述的实施例仅仅是本发明一部分实施例,而非全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。

实施例一

请参阅图1,本发明实施例提供的svga动画解析方法的流程示意图,包括:

s101、定义svga动画信息流中数据类型;

其中,所述数据类型中包括开始元素和结束元素,还可以包括属性数据及字符数据。所述开始元素可以指标记语言中开始标签或起始元素,所述结束元素可以是标记语言中的结束标签或结束标志,所述属性数据指的是标签属性,如type、name、src等,所述字符数据指的是以字符表示的数据内容或属性内容,如“materialdesign”是名为“style”(即样式)为元素的字符数据段。

所述svga动画信息流是指svg格式文件进行xml解析的一种内部表示,在本发明实施例中,svga动画信息流是由一系列缓存组成。动画信息流一般适用于高性能低内存的设备。

需要注意的是,所述svga动画信息流中必然包括开始元素和结束元素。

通过定义数据流中数据类型可以便于边界划分,以及为后续数据解析提供依据,方便数据组成分析。

s102、通过匹配预定字符查找开始元素和结束元素,以对所述svga动画信息流进行边界划分,并标记边界位置;

所述预定字符指的是可以在标记语言或xml中,可以认定为开始元素或结束元素的特殊字符标识。一般的,所述预定字符可以是“<”或“/>”字符,还可以是“?”、“!”等在标记语言中能够表示数据处理开始或结束的边界字符。在本发明实施中,根据xml语言特征,可设计一套通过字符比对,进行开始元素或结束元素的识别流程,示例性的,如根据“<”之后的字符来判断xml标签类型,如果紧跟着的是“/”或者“?”或者“!”,则做进一步判断。

所述边界划分指的是根据开始元素和结束元素所处的位置,用于将所述svga动画信息流划分为若干数据区块,所述数据区块是svga动画信息流主要数据,解析的主要任务即获取所述数据区块中内容数据。

所述标记位置可以指边界元素(开始或结束元素)在缓存中的相对位置或地址信息,也可以通过特殊字符进行标识,在此不做限定。

可选的,根据xml标签节点特征,通过与所述预定字符匹配,判断所述svga动画信息流中所有字符是否为开始元素或结束元素;

标记开始元素和结束元素在所述svga动画信息流的缓存区域中的位置,以划分所述svga动画信息流中内容数据区块。

需要注意的是,在本发明实施例中,开始元素与结束元素是成对存在的,即有一个开始元素时,必然有一个同类型的结束元素。

通过开始元素和结束元素,进行边界划分,使得动画信息流中数据可以并行进行解析。

s103、遍历获取所有相邻边界中数据区块,并行解析所述数据区块。

所述相邻边界是由开始元素与结束元素为边界,在xml中起始标签与结束标签之间,包含有一个或多个标签的属性数据,该属性数据即svga动画信息流的内容数据。所述数据区块即为内容数据,数据区块一般有多个,可包含有关键帧、矢量路径及样式等作用于图片的数据,将svga动画信息流划分为多个数据区块,可以方便并行的数据解析。

可选的,搜索解析后的数据区块中的未解决元素,将所述未解决元素加入元素链表;检查所述元素链表,查找与未解决元素对应的元素。

进一步的,创建全局未解决开始元素的堆栈,当搜索到的所述未解决元素为结束元素,则获取所述堆栈顶层的一个开始元素与所述结束元素匹配;当搜索到的所述未解决元素为开始元素,则将所述开始元素加入到所述堆栈中。

可选的,当搜索到的所述未解决元素为属性前缀,则全局检索所述堆栈获取所述未解决元素对应的属性前缀。

优选的,创建一个空闲元素列表,每当将开始元素加入到所述堆栈中时,预先判断所述空闲元素列表是否存在空闲项,若存在空闲项,则获取空闲项存放对应的开始元素。

优选的,为每个数据区块一次性开辟预设大小的内存缓冲区,用于解析所述内存区块。

边界划分后的内容数据可以进行并行解析,有效提高了解析效率。

在上述方案中,通过标识边界,将svga动画信息流划成多个区块,便于进行并行解析,能够有效提高svga动画解析效率。进一步的,通过后处理阶段处理未解决元素可以减少匹配时间的消耗,保证动画实时快速的解析展示。

基于本发明实施例提供的方案,通过samsunggalaxys9(sm-g9600)、4gb(ram)、qualcommsnapdragon845的硬件机型进行测试,设备运行系统为samsungexperience9.0(android8.0),对于一个大小为32m的超大svga文件,本方案快速解析方案(parallelmethodproducinginfostream,pmpis)与sax解析方案相比较在解析效率上,尤其是在多线程情形下,结合图6可以看出,pmpis相比sax耗时都低。

实施例二

在图1的基础上,下面结合图1详述一种svga动画解析方法的另一实现流程,包括:

s201、svga动画信息流边界划分;

在所述边界划分之前,预先对所述svga动画信息流中数据类型进行定义。

示例性的,将所述svga动画信息流分别定义为开始元素、属性数据、字符数据及结束元素,其中,信息流的开始元素(startofelementorse)的元素名为“order”,属性数据(attributeora),如属性数据为date“1999-1-1”,字符数据以“cd”(characterdata)表示,如“materialdesign”是名为“style”(即样式)为元素的字符数据段,结束元素以“ee”(endofelement)表示。

在进行边界划分时,根据xml语法中,不同字符字符表征的含义,设计边界识别规则。具体的,通过识别所有“<”字符及其邻近字符,判断是否为边界元素。

示例性的,由于每个xml标签节点都是以“<”字符为开始字符,由此,从第一个“<”开始,在识别到“<”后,根据“<”之后的字符来判断xml标签类型。如果紧跟着的是“/”或者“?”或者“!”,则做进一步处理;否则,判定找到一个开始元素。如果紧跟的是“/”字符,则表示找到一个结束元素。

由于上述搜索匹配过程只需进行字符匹配比较,标记边界位置,而不必进行数据整理等操作,边界划分过程资源占用较少,具有轻量级特性。

s202、svga动画信息流数据解析。

根据边界划分,可以将svga动画信息流划分为多个数据块,在所述数据块中包含有一个或多个信息,通过解析获得该信息可用于控制svga动画的展示。

优选的,根据所述svga动画信息流划分阶段,每个边界节点所属类型,分析相邻边界间包含的信息类型。如当边界位置为开始元素时,相邻边界之间包含开始元素、属性数据及字符数据等。示例性的,相邻边界之间包含的信息,如下表:

在svga动画信息流的数据缓存中标注边界位置后,并行对边界划分的数据区块进行并行解析处理,基于堆栈层层解析数据。具体的,获取到边界元素后,依次从堆栈中取出内容数据,根据xml格式数据构成,分别读取标签属性,字符数据、处理命令等。

可选的,在解析的数据区块不完整时,例如未找到匹配的开始元素或结束元素,不会判定解析出错,而是将不完整信息记录在事件数据结构中,然后在后处理过程中解决。具体的,当数据区块被解析后,依次搜索解析后的数据区块中的未解决元素,将未解决元素加入到未解决元素链表中,该未解决元素链表是一种线性的链式存储结构,链表的每个节点可以存放未解决元素,所述未解决元素即不完整或未匹配的解析数据。在进行后处理时,检查未解决元素链表中的元素,与传统全局搜索未解决元素不同,本实施例可以使得后处理的搜索时间大为减少。

在实施例的技术方案中,设计预定字符匹配来查找边界,简单易于实现,同时减少预处理阶段频繁的数据拷贝缓存,大大减少内存占用。同时,标记的边界可以直接对各内容数据区块并行解析,在为增加内存占用的基础上,解析效率得以有效提升。

实施例三

图3为本发明实施例三提供的svga动画解析方法的另一流程示意图,在实施例一的基础上,对步骤s103之后的解析过程进一步进行描述,其包括如下:

在步骤s103遍历获取所有相邻边界中数据区块,并行解析所述数据区块过程中,在解析数据不完整时,需要对不完整的解析元素进行后处理。

s301、搜索解析后的数据区块中的未解决元素,将所述未解决元素加入元素链表;

在解析的数据区块中可能出现开始元素与结束元素不匹配的问题,针对未能匹配的元素或无法查找到元素属性前缀的问题,可以放到后处理阶段进行统一查找匹配。

所述未解决元素可以是不匹配的开始元素或结束元素,也可以是属性前缀或其他解析中未解决元素,在此不一一列举。所述元素链表是一种链表形式的存储结构,用于存放未解决的元素。

s302、检查所述元素链表,根据每个未解决元素所属类型,匹配所述元素链表中的未解决元素。

创建一个堆栈,该堆栈用于存放所有未解决的开始元素,遍历元素链表,判断元素链表中未解决元素所述类型,根据类型的不同,可以匹配、添加或搜索所述堆栈,以处理未解决元素。

具体的,创建全局未解决开始元素的堆栈,当搜索到的所述未解决元素为结束元素,则获取所述堆栈顶层的一个开始元素与所述结束元素匹配;

当搜索到的所述未解决元素为开始元素,则将所述开始元素加入到所述堆栈中。

当搜索到的所述未解决元素为属性前缀,则检索所述堆栈获取所述未解决元素对应的属性前缀。

优选的,创建一个空闲元素列表,每当将开始元素加入到所述堆栈中时,预先判断所述空闲元素列表是否存在空闲项,若存在空闲项,则获取空闲项存放对应的开始元素。此处,创建一个空闲元素列表(freeelementlist,fel),可以临时存放堆栈中获取的元素,或临时存放加入到堆栈中的元素,可以减少堆栈内存开辟的开销,同时提高后处理时未解决元素搜索匹配效率。

优选的,为每个数据区块一次性开辟预设大小的内存缓冲区,用于解析所述内存区块。一次性开辟足够大的内存空间可以避免频繁内存开辟操作,减少线程数,保障解析时计算机性能。

本发明实施例所提供的未解决元素处理方法,不仅可以解决元素不匹配问题,而且可以减少内存占用,提高后处理效率。

实施例四

图4是本发明实施例提供的一种svga动画解析装置的结构示意图,该装置包括:

定义模块410,用于定义svga动画信息流中数据类型,其中,所述数据类型中至少包括开始元素和结束元素;

划分模块420,用于通过匹配预定字符查找开始元素和结束元素,以对所述svga动画信息流进行边界划分,并标记边界位置;

可选的,所述划分模块420包括:

判断单元,用于根据xml标签节点特征,通过与所述预定字符匹配,判断所述svga动画信息流中所有字符是否为开始元素或结束元素;

划分单元,用于标记开始元素和结束元素在所述svga动画信息流的缓存区域中的位置,以划分所述svga动画信息流中内容数据区块。

解析模块430,用于遍历获取所有相邻边界中数据区块,并行解析所述数据区块。

可选的,所述解析模块430包括:

连接单元,用于搜索解析后的数据区块中的未解决元素,连接所述未解决元素组成元素链表;

匹配单元,用于检查所述元素链表,根据每个未解决元素所属类型,匹配所述元素链表中的未解决元素。

进一步的,所述匹配单元包括:

创建一个包含有全局未解决开始元素的堆栈,当搜索到的所述未解决元素为结束元素,则获取所述堆栈顶层的一个开始元素与所述结束元素匹配;

当搜索到的所述未解决元素为开始元素,则将所述开始元素加入到所述堆栈中。

当搜索到的所述未解决元素为属性前缀,则检索所述堆栈获取所述未解决元素对应的属性前缀。

可选的,创建一个空闲元素列表,每当将开始元素加入到所述堆栈中时,预先判断所述空闲元素列表是否存在空闲项,若存在空闲项,则获取空闲项存放对应的开始元素。

优选的,所述遍历获取所有相邻边界中数据区块,并行解析所述数据区块还包括:

为每个数据区块一次性开辟预设大小的内存缓冲区,用于解析所述内存区块。

所述svga动画解析装置通过划分模块410、解析模块420能够对svga动画进行并行解析,不仅可提高动画解析效率,而且能够减少内存占用。

以上所述单元及模块,是基于软件功能上的划分,各单元及模块并不必然具有先后或从属关系。

实施例五

图5是本发明一实施例提供的微服务网关优化的终端装置的结构示意图。所述终端装置,为具备触摸屏的计算机设备,包括但不限于智能手机、智能手表、笔记本、平板电脑、pos机甚至包括车载电脑。如图5所示,该实施例的终端装置5包括:存储器510、处理器520以及系统总线530,所述存储器510包括存储其上的可运行的程序5101,本领域技术人员可以理解,图5中示出的终端装置结构并不构成对终端装置的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。

下面结合图5对终端装置的各个构成部件进行具体的介绍:

存储器510可用于存储软件程序以及模块,处理器520通过运行存储在存储器510的软件程序以及模块,从而执行终端的各种功能应用以及数据处理。存储器510可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序(比如声音播放功能、图像播放功能等)等;存储数据区可存储根据服务器的使用所创建的数据(比如音频数据、电话本等)等。此外,存储器510可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。

在存储器510上包含网络请求方法的可运行程序5101,所述可运行程序5101可以被分割成一个或多个模块/单元,所述一个或多个模块/单元被存储在所述存储器510中,并由处理器520执行,以优化微服务网关,所述一个或多个模块/单元可以是能够完成特定功能的一系列计算机程序指令段,该指令段用于描述所述计算机程序5101在所述服务器4中的执行过程。例如,所述计算机程序5101可以被分割为收集模块、分配模块、扩充模块及存储模块。

处理器520是服务器的控制中心,利用各种接口和线路连接整个终端设备的各个部分,通过运行或执行存储在存储器510内的软件程序和/或模块,以及调用存储在存储器510内的数据,执行终端的各种功能和处理数据,从而对终端进行整体监控。可选的,处理器520可包括一个或多个处理单元;优选的,处理器520可集成应用处理器和调制解调处理器,其中,应用处理器主要处理操作系统、应用程序等,调制解调处理器主要处理无线通信。可以理解的是,上述调制解调处理器也可以不集成到处理器520中。

系统总线530是用来连接计算机内部各功能部件,可以传送数据信息、地址信息、控制信息,其种类可以是例如pci总线、isa总线、vesa总线等。处理器520的指令通过总线传递至存储器510,存储器510反馈数据给处理器520,系统总线530负责处理器520与存储器510之间的数据、指令交互。当然系统总530还可以接入其他设备,例如网络接口、显示设备等。

所述终端装置应至少包括网卡、输出设备等,其他构成部件在此不再赘述。

在本发明实施例中,该终端装置所包括的处理器520执行的可运行程序具体为:

一种svga动画解析方法,包括:

定义svga动画信息流中数据类型,其中,所述数据类型中包括开始元素和结束元素;

通过匹配预定字符查找开始元素和结束元素,以对所述svga动画信息流进行边界划分,并标记边界位置;

遍历所述svga动画信息流获取所有相邻边界中的数据区块,并行解析所述数据区块。

进一步的,所述通过匹配预定字符查找开始元素和结束元素,以对所述svga动画信息流进行边界划分,并标记边界位置具体为:

根据xml标签节点特征,通过与所述预定字符匹配,判断所述svga动画信息流中所有字符是否为开始元素或结束元素;

标记开始元素和结束元素在所述svga动画信息流的缓存区域中的位置,以划分所述svga动画信息流中内容数据区块。

进一步的,所述遍历获取所有相邻边界中数据区块,并行解析所述数据区块还包括:

搜索解析后的数据区块中的未解决元素,将所述未解决元素加入元素链表;

检查所述元素链表,根据每个未解决元素所属类型,匹配所述元素链表中的未解决元素。

进一步的,所述检查所述元素链表,根据每个未解决元素所属类型,匹配所述元素链表中的未解决元素具体为:

创建一个包含有全局未解决开始元素的堆栈,当搜索到的所述未解决元素为结束元素,则获取所述堆栈顶层的一个开始元素与所述结束元素匹配;

当搜索到的所述未解决元素为开始元素,则将所述开始元素加入到所述堆栈中。

进一步的,所述当搜索到的所述未解决元素为开始元素,则将所述开始元素加入到所述堆栈中还包括:

当搜索到的所述未解决元素为属性前缀,则全局检索所述堆栈获取所述未解决元素对应的属性前缀。

进一步的,所述当搜索到的所述未解决元素为开始元素,则将所述开始元素加入到所述堆栈中还包括:

创建一个空闲元素列表,每当将开始元素加入到所述堆栈中时,预先判断所述空闲元素列表是否存在空闲项,若存在空闲项,则获取空闲项存放对应的开始元素。

进一步的,所述遍历获取所有相邻边界中数据区块,并行解析所述数据区块还包括:

为每个数据区块一次性开辟预设大小的内存缓冲区,用于解析所述内存区块。

所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。

在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述或记载的部分,可以参见其它实施例的相关描述。

以上所述,以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1