动画处理方法、装置及设备
技术领域
本说明书涉及计算机技术领域,尤其涉及一种动画处理方法、装置及设备。
背景技术
随着用户越来越频繁地使用终端,这时应用服务提供商为提高用户使用体验,常采用动画形式来向终端的用户展示各种信息,比如app(应用程序)启动欢迎页面,加载进度条,直播信息展示,游戏渲染等。基于现有技术所制作的动画,比如传统帧动画、属性动画、GIF(Graphics Interchange Format,图像互换格式)动画或者webP(一种旨在加快图片加载速度的图片格式)动画,在播放时需要load(装载)一系列的资源图片,且资源图片中存在较多重复的元素,这样播放动画中创建bitmap(位图)时不仅需要大量内存资源,还需要大量CPU(Central Processing Unit,中央处理器)时间片去做渲染计算。目前,常采用辅助工具将待播放动画的动画源文件导出生成动画描述文件,比如Lottie(一种开源的动画库)方案、SVGA(一种开源的动画架构)方案,虽然能减小动画文件大小,但在播放端解析该动画描述文件时仍需占用较多系统资源(如内存空间、CPU时间)。
基于此,需要能够降低动画播放对系统资源占用率的动画处理方案。
发明内容
有鉴于此,本说明书实施例提供了一种动画处理方法、装置及设备,用于降低动画播放时对资源的占用率,如内存资源和CPU资源。
本说明书实施例采用下述技术方案:
本说明书实施例提供一种动画处理方法,包括:
根据预设的数据描述格式将待播放动画的动画源文件生成动画描述数据,所述动画描述数据用于描述所述待播放动画中动画元素的动画效果;
根据预设的数据协议将所述动画描述数据序列化生成动画目标文件以作为所述待播放动画在播放时的加载文件。
本说明书实施例还提供一种动画处理方法,包括:
加载待播放动画的动画目标文件,所述动画目标文件为所述待播放动画的动画描述数据在根据预设的数据协议序列化生成的数据文件,所述动画描述数据用于描述所述待播放动画中动画元素的动画效果;
根据所述数据协议将所述动画目标文件反序列化生成动画绘制数据;
将所述动画绘制数据在预设的画布上绘制以实现所述待播放动画的播放。
本说明书实施例还提供一种动画处理装置,包括生成模块和序列化模块;
所述生成模块用于根据预设的数据描述格式将待播放动画的动画源文件生成动画描述数据,所述动画描述数据用于描述所述待播放动画中动画元素的动画效果;
所述序列化模块用于根据预设的数据协议将所述动画描述数据序列化生成动画目标文件。
本说明书实施例还提供一种动画处理装置,包括加载模块、反序列化模块和绘制模块;
所述加载模块用于加载待播放动画的动画目标文件,所述动画目标文件为所述待播放动画的动画描述数据在根据预设的数据协议序列化生成的数据文件,所述动画描述数据用于描述所述待播放动画中动画元素的动画效果;
所述反序列化模块用于根据所述数据协议反序列化所述动画文件以生成动画绘制数据;
所述绘制模块用于将所述动画绘制数据在预设的画布上绘制以实现所述待播放动画的播放。
本说明书实施例还提供一种用于处理动画的电子设备,包括:
至少一个处理器;以及,
与所述至少一个处理器通信连接的存储器;其中,
所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够:
根据预设的数据描述格式将待播放动画的动画源文件生成动画描述数据,所述动画描述数据用于描述所述待播放动画中动画元素的动画效果;
根据预设的数据协议将所述动画描述数据序列化生成动画目标文件以作为所述待播放动画在播放时的加载文件。
本说明书实施例还提供一种用于处理动画的电子设备,包括:
至少一个处理器;以及,
与所述至少一个处理器通信连接的存储器;其中,
所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够:
加载待播放动画的动画目标文件,所述动画目标文件为所述待播放动画的动画描述数据在根据预设的数据协议序列化生成的数据文件,所述动画描述数据用于描述所述待播放动画中动画元素的动画效果;
根据所述数据协议将所述动画目标文件反序列化生成动画绘制数据;
将所述动画绘制数据在预设的画布上绘制以实现所述待播放动画的播放。
本说明书实施例采用的上述至少一个技术方案能够达到以下有益效果:通过将待处理的动画源文件(即动画素材)生成动画描述数据,这样通过占体积很小的动画描述数据就能完整地保留了原动画素材中动画元素的动画效果,既有利于减小动画文件大小,又非常方便开发人员利用描述数据处理动画素材实现更复杂的动画效果;然后将动画描述数据序列化生成动画目标文件,既进一步降低动画文件的大小,又进一步方便播放端进行反序列化处理和绘制动画,以及支持跨平台的动画应用,可提高动画播放性能(如效率、资源占用)。
附图说明
为了更清楚地说明本说明书实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本说明书中记载的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本说明书实施例中的动画处理的整体处理框架的示意图。
图2为本说明书实施例1的动画处理方法的流程图。
图3为本说明书实施例1的动画处理方法中的一种JSON格式的描述数据的结构示意图。
图4为本说明书实施例1的动画处理方法中的一种自定义格式的描述数据的结构示意图。
图5为本说明书实施例1的动画处理方法中的一种接口描述数据文件的结构示意图。
图6为本说明书实施例2的动画处理方法中的处理语音的流程图。
图7为本说明书实施例4的动画处理装置的结构示意图。
图8为本说明书实施例5的动画处理方法的流程图。
图9为本说明书实施例6的动画处理装置的结构示意图。
具体实施方式
在本说明书实施例中,动画是指通过绘画的手法把人物的表情、动作、变化等分解后画成许多动作瞬间的画幅(即帧),然后将这些画幅进行播放而形成的动态的图像。
在本说明书实施例中,待播放动画的动画源文件可以是动画设计师制作完成的动画文件,这时动画文件可以是某种文件格式的一个或多个文件,比如一个完整的帧动画、GIF动画、Flash动画或者属性动画,也可以是构成待播放动画的若干序列帧(如图片帧),由于动画源文件的体积一般很大,这时在动画应用中需要花销非常多的系统资源,比如存储时需要占用存储空间,比如传输时需要占用较大带宽,甚至是花费用户较多流量,比如播放时需要花销较多内存空间,甚至花销较多处理器资源(如CPU时间片),另一方面需要各个应用平台(比如移动终端,如手机)预设相应的解析工具(比如解析器、播放器)才能加载及播放动画源文件,否则平台可能因不能识别动画源文件而无法播放动画。
为降低动画对资源的占用率,动画应用开发人员通常利用辅助工具先将动画设计师制作完成的待播放动画的动画源文件导出为动画描述文件,比如Lottie(一种开源的动画库)方案采用AE(Adobe After Effects,一款图形视频处理软件)工具中的Bodymovin插件将动画设计师制作完成的动画源文件导出为包含动画信息的JSON(JavaScript ObjectNotation,一种轻量级数据交换格式)格式的描述文件作为目标文件,比如SVGA(一种开源的动画架构)方案利用转换工具(如AE、Flash(一种动画创作与应用程序开发于一身的创作软件))直接对动画设计师制作的动画源文件进行封装形成SVGA格式的描述文件作为目标文件,然后在播放端(如移动终端)中相应地利用预设的解析工具,比如Lottie方案中预设的解析工具为Lottie动画库,SVGA方案中预设的解析工具为SVGA播放器,去解析该目标文件来实现动画播放。通过采用描述文件代替动画源文件后,虽然能降低动画对资源的占用率,但仍存在需要改进的方面,比如Lottie方案中,一方面在导出位图动画方面不够友好,对位图动画的某些动画特效也不支持,从而对位图动画的支持不够,另一方面还需要将目标文件进行打包压缩、再解压至本地等过程,应用开发也不够便捷,还有在播放端中还需要利用Lottie动画库解析目标文件,而SVGA方案中,由于利用转换工具对动画源文件进行封装形成目标文件,且在播放端还需要SVGA播放器,这样一方面不支持其他格式文件(比如音频)的插入、播放,另一方面也不支持引入外部触发来控制、影响动画播放中动画对象的形态以实现交互。
而本说明书实施例提供一种动画处理方法、装置及设备,通过将待播放动画的动画源文件生成动画描述数据,并将动画描述数据按照预设的数据协议序列化为二进制的动画目标文件作为待播放动画在播放时的加载文件,这样在播放端可通过加载该动画目标文件进行反序列化后生成绘制数据,从而可以利用播放端中的画布进行数据绘制来实现动画播放,非常有利于动画应用开发人员对待播放动画进行跨平台应用开发,且反序列化时能进一步减少对资源的占用,有利于提高动画播放性能。如图1所示,本说明书实施例提供的动画处理的整体框架的示意图,动画处理可包括:将动画源文件根据预设的数据描述格式生成动画描述数据,然后根据接口描述文件(IDL文件,其中IDL的全称为Interactive DataLanguage,中文是接口描述语言,也称架构(schema)文件))利用IDL编译器将动画描述数据解析(即序列化生成)为二进制数据的动画目标文件以适应跨平台加载播放动画,最后在播放端根据IDL文件将动画目标文件进行反序列化来生成可直接在播放端中画布上绘制的动画绘制数据,从而通过在画布上绘制动画绘制数据来实现动画播放。
具体实施中,一方面可将动画源文件生成动画描述数据、动画描述数据序列化生成动画目标文件作为一种动画的预处理方法,以便于动画应用开发人员利用该预处理方法对动画设计师制作的动画源文件进行加载及预处理,从而形成可适用于不同应用场景即跨平台加载播放的动画目标文件;另一方面可将动画目标文件的反序列化及动画绘制数据在画布上的绘制作为一种动画的播放处理方法,以便于动画应用开发人员利用该播放处理方法将动画目标文件进行跨平台播放的应用开发。
具体实施中,可采用预设的数据描述格式将动画源文件中每个动画元素的动画效果描述生成所述动画描述数据,这样一方面能够将动画中重复的元素省略掉,又能够采用少量的动画描述数据就准确地将动画绘制所需的信息(即动画效果)描述成画布上绘制所需的绘制路径信息保留下来,从而在保留动画信息的同时,又可有效地减小所述动画源文件对资源的占用,还能在播放动画时只需在画布上进行信息绘制,而不需要针对不同格式的动画源文件采用各种各样的播放器播放,另一方面在采用动画描述数据后,可非常方便动画应用开发人员进行阅读、理解动画描述数据,进而理解动画源文件,从而便于应用开发的调试、测试、验收,以及方便动画应用开发人员根据实际需要,可通过编辑(如修改、增加、删除)动画描述数据来实现动画效果的修改,而无需再要求动画设计师重新设计动画源文件,可有效地减少动画应用开发人员与动画设计师之间沟通,也避免了动画应用开发人员与动画设计师之间的沟通障碍;通过采用更节省资源的数据协议来将动画描述数据根据预设的IDL文件序列化生成二进制数据的动画目标文件,进一步节省对资源的占用,以及提高动画播放性能,比如采用了统一数据协议所生成的动画目标文件可以适应不同平台,进而可实现跨平台动画应用,比如可以更高效地存储数据,可以更高效地传输数据,以及在后续解析数据中还可以节省解析所花销的资源,比如内存空间、处理器资源;通过将动画目标文件反序列化生成动画绘制数据,可非常方便地让动画应用开发人员根据预设的IDL文件反序列化生成各个应用平台的动画绘制数据,进而可将动画绘制数据直接在画布上绘制来实现动画播放,既方便了动画应用开发人员跨平台开发应用,又节省动画播放对资源的占用。
需要说明的是,动画源文件通常可由若干帧素材构成,每帧素材可包含有若干动画对象的动画信息,这样每帧素材可由若干动画对象在运动或者变化的信息来构成,其中动画对象可包括动画中用于承载运动或者变化的信息的对象,比如动画中的角色(如人物角色、动物角色)、物体(如图形、文字)、事件(如声音、场景)等,动画对象可由若干动画元素组成,比如人物角色中,人可由头部、躯干、手、脚等部位组成,这些组成部位就为该人物角色的动画元素,而这些动画元素在运动或者变化时的信息可为动画元素对应的动画效果,这样动画源文件就可采用动画元素的动画效果进行描述。其中,动画元素的动画效果可以为该动画元素在动画播放流的时间节点上的状态数据。
为了使本技术领域的人员更好地理解本说明书中的技术方案,下面将结合本说明书实施例中的附图,对本说明书实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本说明书实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都应当属于本申请保护的范围。
以下结合附图,详细说明本申请各实施例提供的技术方案。
实施例1
本说明书实施例中提供的一种动画处理方法,用于将待播放动画的动画源文件生成对系统资源开销更少的动画目标文件,以便于动画应用开发人员进行动画的应用开发。具体实施中,从设备角度而言,执行主体可以为一种终端,其中终端可为服务器、计算机、手机、平板电脑、智能手表、智能手环等便于动画应用开发人员将待播放动画的动画源文件生成动画目标文件的设备,本申请对此不做具体限定。
另外,本说明书实施例中提供的动画处理方法,从程序角度而言,执行主体可以为终端中安装的程序,该程序可以作为动画应用开发人员处理待播放动画文件的处理程序,该处理程序可为独立应用程序,也可为其他应用程序的辅助程序(比如插件程序),该程序的形式可以是应用端或者网页端等,这里不做具体限定。
如图2所示,本说明书实施例中提供的一种动画处理方法,包括以下步骤:
步骤S102、根据预设的数据描述格式将待播放动画的动画源文件生成动画描述数据,所述动画描述数据用于描述所述待播放动画中动画元素的动画效果。
具体实施中,待播放动画的动画源文件可包括动画设计师制作的动画文件,这时动画源文件可以为动画设计师已制作完成的待播放动画的一个完整文件,也可以为动画设计师已制作的用于构成所述待播放动画所需的若干素材(比如图片素材),通常为便于后续处理,还可将动画设计师已制作完成的待播放动画的一个完整文件,利用辅助工具拆解为若干用于构成所述待播放动画所需的素材,具体可根据动画应用开发的需要来确定动画源文件是一个完整文件还是若干素材;动画源文件的格式可根据动画应用开发的需要去确定,比如所述待播放动画可为帧动画、属性动画、GIF格式动画、webP格式动画或者Flash格式动画等。
需要说明的是,这些动画源文件可以存放于本地,也可以存放于服务端(如服务器、云端),这里不做具体限定。另外,可根据动画应用开发需要,采用相应的API(Application Programming Interface,应用程序编程接口)去得到所述动画源文件,这里不再展开说明。
进一步,为减小动画开发处理及应用场景中对资源的占用率,通常对动画文件的大小有较多限制,比如传输时需要节约带宽和流量,比如包含动画应用的用户端安装包不能过大,这时可在保证动画质量的基础上,对所述动画源文件进行压缩处理。具体地,在将所述动画源文件生成动画描述数据前,所述动画处理方法还可包括:确定所述动画源文件的文件大小是否超出预设的文件大小阈值,若是则压缩所述动画源文件。
具体实施中,可根据应用场景对动画质量的需求来选择相应压缩工具。这里,以动画应用在Android(安卓)系统为例,鉴于Android对位图支持较好,且位图的图片格式通常可优选png(Portable Network Graphics,便携式网络图形)格式,这时可优选pngquant(一种开源的png压缩工具)对所述动画源文件进行压缩处理,从而能够对图片进行大幅度的压缩,有效减小了图片的大小,进而有效地降低所述动画描述数据的大小,最终应用动画的APK(Android(安卓)安装包)也得到有效减小。另外,当所述动画源文件为非png格式图片构成时,还可通过辅助工具如Photoshop(一种图像处理软件)、AE、Flash等工具,将所述动画源文件导出为png格式的若干图片,进而利用pngquant进行压缩处理,来减小所述动画源文件的大小。
通过预设的数据描述格式将所述动画源文件解析生成所述动画描述数据,这样在处理不同格式的动画源文件时,仍可采用相同的数据描述格式去解析所述动画源文件。
具体实施中,可采用辅助工具(如Photoshop、AE、Flash等)来将动画源文件转换为动画描述数据,这时数据描述格式通常可预设于辅助工具中,这里辅助工具可包括第三方提供的通用辅助工具,还可包括根据应用而自定义的辅助工具,预设的数据描述格式可为通用的数据描述格式,还可以为根据应用自定义的数据描述格式,这样通过动画描述数据就能将动画效果有关的数据准确地抽取并保留,一方面可有效地减小动画源文件在存储、传输、播放等环节中对资源(如存储空间、内存空间、CPU时间片等)的占用率,另一方面还方便动画应用开发人员对动画进行开发应用处理,比如通过阅读所述动画描述数据来进行动画应用开发调试、测试及验收,比如通过修改(如增加、删除)所述动画描述数据中的数据来修改动画效果,这样在需要更改动画效果时可不需要动画设计师重新设计动画。
为便于动画应用开发人员利用所述动画描述数据,所述预设的数据描述格式可采用通用的接口描述语言格式,比如JSON(JavaScript Object Notation,一种轻量级数据交换格式)格式、XML(Extensible Markup Language,可扩展标记语言)格式,从而可便于动画应用开发人员采用支持该通用的数据描述格式的第三方辅助工具直接导出生成所述动画描述数据。
在一个可选实现方式中,优选JSON格式,并通过以下操作来获取动画源文件所对应JSON格式的动画描述数据:比如,当动画源文件为采用AE制作的动画文件(即动画源文件的文件扩展名为“.aep”)时,可使用AE中的Bodymovin插件作为辅助工具导出所述动画源文件所对应的JSON格式文件作为所述动画描述数据。再比如,当动画源文件为Flash动画文件时,可采用Flash编辑器(比如Photoshop CS6)导出JSON格式文件作为所述动画描述数据。
需要说明的是,为便于理解,这里给出一种通过对图层进行描述的JSON格式样例。鉴于动画(如位图动画、矢量动画)是由若干帧组成,每一帧又是由若干图层构成,每一图层又包括若干动画元素,且相邻帧中通常仅少数图层中的动画元素存在变化,而多数图层中的动画元素变化很小甚至无变化,比如小鸟在蓝天白云的天空中滑翔的动画中,通常小鸟为一个图层,蓝天为一个图层,白云为一个图层,而小鸟的头、身体、翅膀可作为动画元素,有变化的白云也可作为动画元素,这时蓝天的图层在各帧动画中基本相同,有变化的白云在少量的帧中存在变化,而小鸟的图层在多数帧中存在变化,这时可将包含动画元素变化(即动画效果)的图层所属的帧定义为关键帧,从而通过指定起始关键帧和结束关键帧就能将这些图层中的动画元素的动画效果描述出来,即采用若干数组对关键帧中的图层信息进行描述来解析生成所述动画描述数据。
如图3所示,一种采用JSON格式的数据描述格式,通常可包括以下一种或多种数据:引用资源(即构成动画源文件的资源,如图片/预合成层)的集合描述,这里通常将引用资源的名称的描述数据存放于assets数组中,多个资源时采用逗号分隔;图层数据描述,通过layers描述帧中各个图层的数据,这里的帧为指定的关键帧,即指定起始关键帧和结束关键帧,所以每个图层所对应的关键帧可能完全相同,也可能部分相同,甚至完全不同;帧率参数,即一秒钟播放的帧数(数值类型);画布参数,用于描述画布的宽度(数值类型)和高度(数值类型)。
其中图层数据又通常可包括:所属引用资源的名称(字符串类型)、图层名称(字符串类型)、父图层序号(即所依赖的父图层的相应图层序号,第一个图层可没有父图层信息)、图层序号(数值类型)、图层类型(即类型值,可为字符串或数值类型)、图层中起始关键帧(数值类型)、图层中结束关键帧(数值类型)、图层外观参数(如透明度特性、旋转特性、位置特性、锚点参数、缩放参数等)、图层绘制参数(如位图图层的宽度、高度和颜色,或者矢量图层的形状数据(可通过path属性做描述数据))等若干数据。
在一个可选实现方式中,鉴于通用的数据描述格式是对图层进行关键帧描述,往往存在非常多的冗余数据,如前述通用的JSON格式中,虽然通过描述数据能减小所述动画源文件的大小,但由于在进行图层描述时,每个图层中都通过指定关键帧(即起始关键帧和结束关键帧),然后对图层进行描述来生成所述动画描述数据,这样在描述不同图层时就存在对相同关键帧进行重复描述情况,使得所生成的动画描述数据中也存在这些关键帧中动画元素的重复描述信息,导致动画描述数据还需要占用较多空间资源(如存储资源、处理资源)。为更有效地描述所述动画源文件,并使得所生成的所述动画描述数据在动画应用开发的处理中占用较少资源,这时可根据动画应用场景来定义所述动画描述数据的格式。
具体地,在将动画源文件生成动画描述数据时,根据预设的数据描述格式将所述动画源文件中每帧动画的动画元素按时间序列解析生成所述动画描述数据。这样通过对所述动画源文件中的每一帧动画都进行描述,并按时间序列形成动画中每一个动画元素的动画效果的描述数据,既保证每帧动画都有相应的描述数据,又能有效地减少动画元素中重复的描述数据,还能便于动画应用开发人员根据所述动画描述数据对各个动画元素进行开发应用,从而可支持多种数据插入,编辑动画描述数据来修改动画元素的动画效果,增删动画元素,对动画元素建立索引来开发新应用等处理。
为便于理解,这里给出一种自定义的数据描述格式的所述动画描述数据,如图4所示,在该数据描述格式中,frames用于描述每一帧动画中各个动画元素的动画效果,这里采用key-value结构,其中key为字符串,用于作为动画元素的唯一标记(比如ID(Identity,身份标识号码)),即标记位图字符或矢量标志,value为字符串(即字节流),用于描述key对应的动画元素在时间序列上的动画效果,这样通过若干组key-value描述数据,从而将动画中各个元素及其动画效果描述成字符数据,即所述动画描述数据由字符数据构成;layout用于描述动画元素的起始位置信息,即起始位置的x、y坐标信息,比如x=14,y=14;sprites用于描述每帧中动画元素的外观参数,其中index为帧序号,比如index=0,trans用于帧序号为index的位图位置描述或矢量描述,即trans描述动画元素的外观参数,比如位置参数、锚点参数、缩放参数、旋转参数等。
需要说明的是,在图4所示的描述格式中,还可包括以下一个或多个描述参数:版本参数,如ver用于标识版本,为字符串(如1.0.0);count用于描述总帧数,为数值类型,如109帧;fps用于描述帧率,为数值类型,如帧率设为30;ViewBox用于描述画布的大小,比如画布的宽度(width)、高度(height),width、height为数值类型,比如width=190,height=144。另外,还可根据具体动画应用开发的需要,来在自定义插件中配置动画的播放时间、帧率等参数,实现动画参数的可配置特性,这里不再展开说明。
步骤S104、根据预设的数据协议将所述动画描述数据序列化生成动画目标文件以作为所述待播放动画在播放时的加载文件。
其中,所述数据协议可包括能够在动画的应用场景中有效地减小所述动画目标文件对资源占用的数据协议,比如在存储环节可节约存储空间,或者在传输环节可节约传输带宽、流量,或者在播放环节可节省播放所需的内存空间、甚至是CPU资源,如在Android(安卓)中,显示系统是以每秒60帧的频率工作,就要求动画播放的方案具有每秒钟60帧的处理能力,即每帧只能花费16毫秒的时间来完成动画绘制,如果绘制过程超过16毫秒,动画就会有停滞感,这时为获得如丝般顺滑的动画,需要降低对内存、CPU消耗要求。这时,所述数据协议可以为根据应用场景进行定义的数据协议,也可以为通用的数据协议,如flatbuffers(一个开源的、跨平台的、高效的序列化协议)、protobuf(Protocol Buffers,一种开源、高效、快捷的序列化协议)、protostuff(一个开源的、在protobuf基础上发展出来的序列化协议,可以不像protobuf那样需要根据.proto文件进行预编译来进行序列化)等将数据序列化为二进制数据的协议。
通过所述数据协议序列化生成所述动画目标文件后,不仅节省了文件对资源的占用,还便于动画应用开发人员对该二进制数据流的动画目标文件进行不同平台的应用开发,即支持跨平台应用开发,以及播放端根据IDL文件就可进行反序列化,有效降低反序列化对系统资源(如内存资源、CPU资源)的占用,可满足动画播放中16毫秒的刷新要求,从而可提高播放性能,还有由于采用二进制数据流进行传输及处理,若没有反序列化的接口描述文件(即IDL文件),即使截取到数据包也无法进行反序列化,这样可有利于保护动画版权。
在一个可选实现方式中,为有效减少动画应用中动画的播放对资源(如序列化时间、反序列化时间、内存花销、CPU花销等)的占用,这时可在将所述动画描述数据生成所述动画目标文件时,所述数据协议优选flatbuffers,这时可根据flatbuffers的IDL文件(即接口描述文件),即针对所述动画描述数据所定义的IDL文件对所述动画描述数据进行序列化生产一系列对象数据,然后这些对象数据就按数据层级结构保存在一个扁平化的二进制缓存(即一维数组)中,从而形成所述动画目标文件,这样既能保证数据结构变化的前后向兼容,可有效地分配和管理对象数据,又能在动画的播放时,即反序列化数据时可直接从内存中读取序列化数据,即加载“解析”数据只需要把存储的byte数组加载到内存中即可,无需生成中间变量,从而节省反序列化对资源的占用,比如反序列化所需的时间、内存、CPU等资源。
为便于理解,这里给出flatbuffers对前述自定义的所述动画描述数据进行序列化时所需的一种IDL文件(即schema文件,通常称.fbs文件)示例。如图5所示,在该IDL文件中,采用tables(表)定义前述自定义的所述动画描述数据的flatbuffers对象以及对象中的字段列表,其中Venus对象用于指定序列化后的数据的root table(根表),以便于反序列化时根据Venus对象获取序列化数据,这时通过该Venus对象形成了按数据层级结构保存的一个扁平化的二进制缓存(即一维数组),即该Venus对象下,包括字段ver(用于描述版本号,为string(字符串)类型)、count(用于描述总帧数,为int数值类型)、viewBox(用于描述画布(ViewBox)对象)、fps(用于描述帧率,为int类型)以及frames(用于描述Frames(帧)对象),进一步ViewBox对象中包括字段width(宽度,为float32数值类型)、height(高度,为float32数值类型)参数,Frames对象中包括字段key(动画元素,为string(字符串)类型)、sprites(用于描述Sprites(动画元素在时间序列上的外观参数,比如旋转、位置、锚点及缩放等参数)对象)、layout(用于描述Layout(动画元素的位置)对象),Sprites对象中包括字段index(用于描述帧序号,为long数值类型)、alpha(用于描述透明度,为float32数值类型)和trans(用于描述Trans对象),Trans对象中包括字段a(用于描述动画元素在时间序列上的旋转参数)、b(用于描述动画元素在时间序列上的锚点参数)、c(用于描述动画元素在时间序列上的位置参数)、d(用于描述动画元素在时间序列上的缩放参数)以及tx(用于描述动画元素在时间序列上在x轴方向上偏移量)、ty(用于描述动画元素在时间序列上在y轴方向上偏移量),这些外观参数的数据类型为float32数值类型,Layout对象中包括字段x(用于描述动画元素的起始位置,即x坐标)、y(用于描述动画元素的起始位置,即y坐标)。
因此在序列化时,可利用flatc(一种IDL编译器)根据.fbs文件(flatbuffers对应的IDL文件)对所述动画描述数据进行序列化,从而生成一系列对象数据,这时所述动画目标文件就由这些已按层级存储的二进制的对象数据组成。
需要说明的是,本领域的技术人员应当能够理解,在动画应用开发中可根据所述动画描述数据的描述格式来编写flatbuffers相应的Schema(架构,即.fbs文件),这里不再列举说明。
在一个可选实现方式中,为有效减少动画应用中动画的播放对资源(如序列化/反序列化时间、内存、CPU等)的占用,还可在将所述动画描述数据生成所述动画目标文件时,所述数据协议优选protobuf或者protostuff,其中protobuf的序列化过程也像前述的flatbuffers序列化过程类似,需要根据protobuf的IDL文件(即.proto文件)进行预编译实现序列化,protostuff可以不需预编译,即不需.proto文件,而在代码执行时来实现序列化,这里不再对protobuf或者protostuff的序列化过程进行赘述。
通过上述步骤S102~S106,首先将动画应用开发处理中需要占用较多资源的动画源文件解析生成动画描述数据,可有效地降低动画应用开发处理对资源的占用率,还便于动画应用开发人员修改动画数据;然后再将所述动画描述数据序列化生成动画目标文件,不仅进一步降低动画应用开发处理对资源的占用,还不需要任何依赖库,对序列化数据的访问也不需要打包和拆包,便于动画应用开发人员对该二进制数据流的动画目标文件进行跨平台的应用开发,可将待播放动画应用于多个播放场景(如web端、Android系统、IOS系统)。
需要说明的是,本领域的技术人员应当理解,在具体实施中,可将前述步骤S102~106形成一种动画应用的辅助工具或者动画处理工具中的辅助工具(如插件),即将所述动画描述数据的数据描述格式、序列化所需的数据协议及IDL文件等,比如通过扩展实现来形成类似于AE中的Bodymovin插件,使得动画应用开发人员利用该扩展实现的插件就能快捷地将动画源文件导出生成所述动画目标文件。
实施例2
本说明书实施例中提供的一种动画处理方法,是在实施例1的基础上,通过将语音解析生成时间序列上对应的语音描述数据,从而实现动画支持语音,即实现语音动画,且该语音动画可以支持。
具体地,如图6所示,所述动画处理方法还包括:
步骤S202、根据所述数据描述格式将所述待播放动画对应的音频生成音频描述数据。
其中,所述待播放动画对应的音频为需要添加(即插入)到所述待播放动画中以增加动画效果(即声音效果)的音频数据,这时可根据所述数据描述格式将音频作为一个对象进行描述,从而生成该对象对应的字符串,即所述音频描述数据,其中该音频可以为来自本地端,也可以来自服务端(如服务器),这里不做具体限定。另外,还可采用相应的API去获取所述音频,这里也不再展开说明。
需要说明的是,当所述待播放动画已合成有音频时,这时音频已成为动画源文件的一部分,比如带声音的Flash动画中,音频(如流式音频、事件音频)通常已作为动画中的一个图层,这样在将动画源文件生成所述动画描述数据时,也就将音频生成了对应的动画描述数据,因此这里不再对这种情况进行说明。
具体实施中,鉴于音频是时间序列上的数据,这时不同格式的音频,均可按时间序列进行解析,然后根据所述数据描述格式生成在时间序列上的一系列字符串(即音频描述数据),避免了不同格式的音频需要不同的解析器去解析。
需要说明的是,步骤S202可以在步骤S102前,也可以在步骤S102后,也可步骤S202与步骤S102同时进行,这里不再具体限定。
这时,可采用步骤S204,即将所述音频描述数据合并到所述动画描述数据中,从而在生成的动画目标文件中包含有音频的数据。
通过将音频按时间序列解析生成音频描述数据,从而可对插入到所述待播放动画中的不同格式的音频统一描述为音频描述数据,便于动画应用开发人员在后续处理中对语音数据进行应用开发;由于将音频作为一个对象进行描述,可方便地将音频插入到待播放动画中,这样动画应用开发人员仍可对支持音频添加的动画即所述动画目标文件进行跨平台应用开发,且语音动画在播放时不需针对不同格式的音频使用不用音频播放来播放音频,而可对反序列化后的音频采用同一音频播放器进行语音播放。
实施例3
本说明书实施例中提供的一种动画处理方法,是在实施例1中的基础上,通过建立动画元素与外部触发事件的索引,可实现交互式动画,比如交互式动画游戏,进一步扩展动画应用,有利于提高用户体验。
具体地,所述动画处理方法还包括:根据预设的触发事件建立索引关系,所述索引关系为所述触发事件与所述动画元素的动画效果的映射关系,从而用户通过触发事件可与动画进行交互,通过交互来让动画可以在不同情况下有不同的动画表现,这样交互更具趣味性,让用户在交互中获取乐趣。
其中,触发事件可包括终端获取到的用户发出的交互指令,比如终端通过传感器(如触摸传感器、重力传感器、加速度传感器等)获得的用户操作数据,如通过屏幕传感器可获取用户点击屏幕的操作数据,通过重力传感器可获取用户倾斜屏幕的操作数据,这里不再一一列举。
通过建立出触发事件与动画元素之间的索引,进而可通过控制触发事件来控制动画元素的表现,比如通过屏幕触摸、重力传感等硬件元素结合,可以制作动画游戏,如赛车游戏,这时可以不通过按键,只需将手机平放,左右摇摆就可以代替模拟机游戏的方向左右移动,进一步扩展动画的应用,也让用户在动画交互中获取乐趣,提高用户体验。
需要说明的是,根据预设的触发事件建立索引关系时,可通过将所述触发事件作为预设的数据描述格式中数据项,从而在将所述动画源文件进行描述时就生成包含所述索引的动画描述数据,也可在所述动画描述数据生成后,再在所述动画描述数据中建立所述索引从而形成包含所述索引的动画描述数据。
实施例4
基于同样的思路,本说明书实施例中提供的一种动画处理装置。
需要说明的是,鉴于前述实施例中对所述动画处理方法已进行了详细说明,本实施例中对所述动画处理装置所涉及的相应内容将不再赘述。
如图7所示,其中虚线方框表示可选的模块,所述的动画处理装置1包括:生成模块11和序列化模块12。其中,生成模块11用于根据预设的数据描述格式将所述动画源文件生成动画描述数据,所述动画描述数据用于描述所述待播放动画中动画元素的动画效果;序列化模块12用于根据预设的数据协议将所述动画描述数据序列化生成动画目标文件以作为所述待播放动画在播放时的加载文件。
可选地,生成模块11用于根据预设的数据描述格式将所述动画源文件中每帧动画的动画元素按时间序列生成所述动画描述数据。
可选地,生成模块11还用于根据所述数据描述格式将所述待播放动画对应的音频生成音频描述数据,并将所述音频描述数据合并到所述动画描述数据中。
可选地,动画处理装置1还包括索引模块13,索引模块14用于根据预设的触发事件建立索引关系,所述索引关系为所述触发事件与所述动画元素的动画效果的映射关系。
可选地,生成模块11用于根据预设的数据描述格式将所述动画源文件按图层解析生成所述动画描述数据。
可选地,动画处理装置1还包括压缩模块14,压缩模块14用于在调用生成模块11前,确定所述动画源文件的文件大小是否超出预设的文件大小阈值,若是则压缩所述动画源文件。
基于同样的思路,本说明书实施例提供一种与实施例1对应的动画处理的电子设备,所述电子设备包括:至少一个处理器;以及,与所述至少一个处理器通信连接的存储器;其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行以下步骤:
根据预设的数据描述格式将所述动画源文件生成动画描述数据,所述动画描述数据用于描述所述待播放动画中动画元素的动画效果;
根据预设的数据协议将所述动画描述数据序列化生成动画目标文件以作为所述待播放动画在播放时的加载文件。
基于同样的思路,本说明书实施例提供一种与实施例1对应的非易失性计算机存储介质,存储有计算机可执行指令,所述计算机可执行指令设置为:
根据预设的数据描述格式将所述动画源文件生成动画描述数据,所述动画描述数据用于描述所述待播放动画中动画元素的动画效果;
根据预设的数据协议将所述动画描述数据序列化生成动画目标文件以作为所述待播放动画在播放时的加载文件。
实施例5
基于同样的思路,本说明书实施例中提供的一种动画处理方法,用于处理前述实施例1~3中任意一实施例中的所述动画目标文件,通过对所述动画目标文件的处理来生成动画绘制数据,以便于将动画绘制数据在画布上绘制来实现待播放动画的播放。
具体实施中,从设备角度而言,执行主体可以为一种终端,其中终端可为服务器、计算机、手机、平板电脑、智能手表、智能手环等便于动画应用开发人员将待播放动画的动画目标文件生成动画绘制数据的设备,本申请对此不做具体限定。
另外,本说明书实施例中提供的动画处理方法,从程序角度而言,执行主体可以为终端中安装的程序,该程序可以作为动画应用开发人员处理待播放动画文件的动画目标文件的处理程序,该处理程序可为独立应用程序,也可为其他应用程序的插件程序,该程序的形式可以是应用端或者网页端等,这里不做具体限定。
如图8所示,本说明书实施例中提供的一种动画处理方法,包括以下步骤:
步骤S302、加载待播放动画的动画目标文件,所述动画目标文件为所述待播放动画的动画描述数据在根据预设的数据协议序列化生成的数据文件,所述动画描述数据用于描述所述待播放动画中动画元素的动画效果。
需要说明的是,本说明书实施例中的所述动画目标文件为前述实施例1~3中任意一实施例中的所述动画目标文件。这时,所述动画目标文件可以存放于本地,也可以存放于服务端(如服务器、云端),这里不做具体限定。另外,在获取所述动画目标文件时,可根据动画应用开发需要,采用相应的API(Application Programming Interface,应用程序编程接口)去获取,这里不再展开说明。
步骤S304、根据所述数据协议将所述动画目标文件反序列化生成动画绘制数据。
通过反序列化从所述动画目标文件中获取出各个动画元素的动画效果对应的数据,从而将这些数据作为画布绘制所需的绘制数据,即将这些数据作为所述动画绘制数据。
需要说明的是,若本实施例中的所述动画目标文件为前述实施例2中的所述动画目标文件时,即本实施例中的所述动画目标文件为实施例2中的包括了所述音频描述数据的所述动画描述数据根据预设的数据协议序列化而成的,则在步骤S304中,即根据所述数据协议将所述动画目标文件反序列化生成动画绘制数据,从而所述动画绘制数据中也包括了所述音频描述数据对应的音频数据和所述动画元素的动画效果的绘制参数,其中音频数据用于在音频播放器中实现声音播放,绘制参数用于在画布上实现动画元素的动画效果;若本实施例中的所述动画目标文件为前述实施例3中的所述动画目标文件时,即本实施例中的所述动画目标文件为实施例3中的包含所述索引的所述动画描述数据根据预设的数据协议序列化而成的,这时所述动画绘制数据包括所述索引对应的所述触发事件的获取参数和所述动画元素的动画效果的绘制参数,其中所述获取参数用于获取触发所述触发事件的触发信号,所述绘制参数用于在画布上实现动画元素的动画效果。
进一步,为降低反序列化时对播放动画的终端的性能(如反序列化时间、内存、CPU)要求,具体地,根据所述数据协议异步将所述动画目标文件反序列化生成动画绘制数据,比如将反序列化操作放在其他终端进行,从而播放动画的终端仅需根据所述动画绘制数据进行绘制动画,比如将反序列化操作提前完成,从而在播放动画时只需加载所述动画绘制数据。
步骤306、将所述动画绘制数据在预设的画布上绘制以实现所述待播放动画的播放。
在具体实施中,所述动画绘制数据为一些对象数据,这时可利用应用平台自身的绘制机制,比如Android平台中可利用如View类的绘制机制,可通过Drawable(Android平台下通用的图形对象绘制方法)来实现动画播放,即将所述动画绘制数据通过Drawable在预设的画布上进行绘制以实现所述待播放动画的播放这里不再展开说明。
进一步,当所述动画绘制数据为位图对象时,还可采用轮播方式,即通过轮播所述位图对象来实现动画播放,从而可将动画扩展应用到仅支持位图播放的终端的应用场合中,进一步扩展动画的应用场景,让不同终端的用户感受动画体验。具体地,将所述动画绘制数据在预设的画布上绘制包括:将所述位图对象在预设的画布上轮播。
需要说明的是,若本实施例中的所述动画绘制数据包括前述步骤S304中的所述音频数据,这时可采用比如Android平台中的videoview(Android平台下通用的视频播放方法)来实现音频播放,也可采用其他音频播放方式对所述音频数据进行播放,这里不做具体限定。
通过上述步骤S302~306,非常方便、快捷地从所述动画目标文件中获取出各个动画元素的动画效果对应的数据,即所述动画绘制数据。由于不同格式的待播放动画经过描述、序列化以及反序列化后,最终转换为同一格式的所述动画绘制数据,这时所述待播放动画的播放只需直接将所述动画绘制数据在预设的画布(即播放器)上进行绘制(即播放),无需在应用平台中采用多种播放器去播放不同格式的所述待播放动画,既解决了动画应用平台对不同格式的支持问题,支持动画的跨平台应用,又能有效地降低动画播放对资源的占用率。
进一步,当所述动画绘制数据包括前述步骤S304中的所述索引时,所述动画处理方法还包括:获取触发信号,所述触发信号用于触发预设的触发事件以便于根据所述触发事件索引所述动画描述数据,所述触发信号包括用户操作终端时产生的触发信号,用户操作终端时产生的触发信号包括用户在操作终端时相应传感器产生的触发信号,所述传感器可包括屏幕传感器、重力传感器、陀螺仪传感器、加速度传感器等终端中的若干种传感器,这时步骤S306,即将所述动画绘制数据在预设的画布上绘制包括:根据所述触发信号将所述动画绘制数据在所述画布上绘制。这样,通过添加外部因素,即所述索引,使得一个动画会在不同情况下有不同的表现,交互更具趣味性;以及通过与终端的用户进行交互,即结合终端的屏幕触摸、重力传感等传感器的触发元素,可以制作简单的小游戏。
实施例6
基于同样的思路,本说明书实施例中提供的一种动画处理装置。
需要说明的是,鉴于前述实施例5中对所述动画处理方法已进行了详细说明,本实施例中对所述动画处理装置所涉及的相应内容将不再赘述。
如图9所示,其中虚线方框表示可选的模块,所述的动画处理装置2包括:加载模块21、反序列化模块22和绘制模块23。其中,加载模块21用于加载待播放动画的动画目标文件,所述动画目标文件为所述待播放动画的动画描述数据在根据预设的数据协议序列化生成的数据文件,所述动画描述数据用于描述所述待播放动画中动画元素的动画效果;反序列化模块22用于根据所述数据协议反序列化所述动画文件以生成动画绘制数据;绘制模块23用于将所述动画绘制数据在预设的画布上绘制以实现所述待播放动画的播放。
可选地,动画处理装置2还包括获取模块24,获取模块24用于获取触发信号,所述触发信号用于触发预设的触发事件以便于根据所述触发事件索引所述动画描述数据;这样,绘制模块23用于根据所述触发信号将所述动画绘制数据在所述画布上绘制。
进一步,可选地,获取模块24包括传感器信号获取模块,这样通过所述传感器信号获取模块获取传感器产生的信号以作为所述触发信号。
可选地,反序列化模块22用于根据所述数据协议异步将所述动画目标文件反序列化生成动画绘制数据。
可选地,当所述动画绘制数据为位图对象时,绘制模块23用于将所述位图对象在预设的画布上轮播以实现所述待播放动画的播放。
基于同样的思路,本说明书实施例提供一种与实施例5对应的动画处理的电子设备,所述电子设备包括:至少一个处理器;以及,与所述至少一个处理器通信连接的存储器;其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行以下步骤:
加载待播放动画的动画目标文件,所述动画目标文件为所述待播放动画的动画描述数据在根据预设的数据协议序列化生成的数据文件,所述动画描述数据用于描述所述待播放动画中动画元素的动画效果;
根据所述数据协议将所述动画目标文件反序列化生成动画绘制数据;
将所述动画绘制数据在预设的画布上绘制以实现所述待播放动画的播放。
基于同样的思路,本说明书实施例提供一种与实施例5对应的非易失性计算机存储介质,存储有计算机可执行指令,所述计算机可执行指令设置为:
加载待播放动画的动画目标文件,所述动画目标文件为所述待播放动画的动画描述数据在根据预设的数据协议序列化生成的数据文件,所述动画描述数据用于描述所述待播放动画中动画元素的动画效果;
根据所述数据协议将所述动画目标文件反序列化生成动画绘制数据;
将所述动画绘制数据在预设的画布上绘制以实现所述待播放动画的播放。
上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置、设备、非易失性计算机存储介质实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明。
本说明书实施例提供的装置、设备、非易失性计算机存储介质与方法是对应的,因此,装置、设备、非易失性计算机存储介质也具有与对应方法类似的有益技术效果,由于上面已经对方法的有益技术效果进行了详细说明,因此,这里不再赘述对应装置、设备、非易失性计算机存储介质的有益技术效果。
在20世纪90年代,对于一个技术的改进可以很明显地区分是硬件上的改进(例如,对二极管、晶体管、开关等电路结构的改进)还是软件上的改进(对于方法流程的改进)。然而,随着技术的发展,当今的很多方法流程的改进已经可以视为硬件电路结构的直接改进。设计人员几乎都通过将改进的方法流程编程到硬件电路中来得到相应的硬件电路结构。因此,不能说一个方法流程的改进就不能用硬件实体模块来实现。例如,可编程逻辑器件(Programmable Logic Device,PLD)(例如现场可编程门阵列(Field Programmable GateArray,FPGA))就是这样一种集成电路,其逻辑功能由用户对器件编程来确定。由设计人员自行编程来把一个数字系统“集成”在一片PLD上,而不需要请芯片制造厂商来设计和制作专用的集成电路芯片。而且,如今,取代手工地制作集成电路芯片,这种编程也多半改用“逻辑编译器(logic compiler)”软件来实现,它与程序开发撰写时所用的软件编译器相类似,而要编译之前的原始代码也得用特定的编程语言来撰写,此称之为硬件描述语言(Hardware Description Language,HDL),而HDL也并非仅有一种,而是有许多种,如ABEL(Advanced Boolean Expression Language)、AHDL(Altera Hardware DescriptionLanguage)、Confluence、CUPL(Cornell University Programming Language)、HDCal、JHDL(Java Hardware Description Language)、Lava、Lola、MyHDL、PALASM、RHDL(RubyHardware Description Language)等,目前最普遍使用的是VHDL(Very-High-SpeedIntegrated Circuit Hardware Description Language)与Verilog。本领域技术人员也应该清楚,只需要将方法流程用上述几种硬件描述语言稍作逻辑编程并编程到集成电路中,就可以很容易得到实现该逻辑方法流程的硬件电路。
控制器可以按任何适当的方式实现,例如,控制器可以采取例如微处理器或处理器以及存储可由该(微)处理器执行的计算机可读程序代码(例如软件或固件)的计算机可读介质、逻辑门、开关、专用集成电路(Application Specific Integrated Circuit,ASIC)、可编程逻辑控制器和嵌入微控制器的形式,控制器的例子包括但不限于以下微控制器:ARC 625D、Atmel AT91SAM、Microchip PIC18F26K20以及Silicone Labs C8051F320,存储器控制器还可以被实现为存储器的控制逻辑的一部分。本领域技术人员也知道,除了以纯计算机可读程序代码方式实现控制器以外,完全可以通过将方法步骤进行逻辑编程来使得控制器以逻辑门、开关、专用集成电路、可编程逻辑控制器和嵌入微控制器等的形式来实现相同功能。因此这种控制器可以被认为是一种硬件部件,而对其内包括的用于实现各种功能的装置也可以视为硬件部件内的结构。或者甚至,可以将用于实现各种功能的装置视为既可以是实现方法的软件模块又可以是硬件部件内的结构。
上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机。具体的,计算机例如可以为个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任何设备的组合。
为了描述的方便,描述以上装置时以功能分为各种单元分别描述。当然,在实施本申请时可以把各单元的功能在同一个或多个软件和/或硬件中实现。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
本申请可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本申请,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
以上所述仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。