一种调整动态图片动画时长的方法转让专利

申请号 : CN201410808662.1

文献号 : CN104536748B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 王强宇

申请人 : 杭州短趣网络传媒技术有限公司

摘要 :

本发明公开了一种调整动态图片动画时长的方法,预先将动态图片进行人为分段,通过配置json信息让动画时长变得可控,通过循环某段动画或者裁剪非核心段动画来延长或缩短动画的显示时长;这种方式突破了原有动画固定时长所带来的局限性,让动态图片的动画时长可调,灵活性变大,并且原本的率帧不会改变,动画顺序上保持原先的路径和效果,使得添加的动态图片能够完美融合到媒介中。

权利要求 :

1.一种调整动态图片动画时长的方法,其特征在于,包括以下步骤:

(1)获取动态图片:所述动态图片由若干张png序列帧图片组成;

(2)建立json配置表:所述json配置表包含以下信息:循环段标识extendSection;由帧图片的序号pic及该帧的开始时间time组成的帧数组frameArry;由每段的开始时间beginTime、结束时间endTime、调整帧率标识Shrink、最短时长mintime和最长时长maxtime组成的分段数组timeArry;根据动画效果,设定需要调整的段的最短时长X;

缩短动画的实现原理:shrink标示0为不可压缩帧率,标示1为可以压缩帧率;Mintime是每段的最短时长,如果在该段写入这段本身的时长,说明该段是不能被截去的;如果写入

0则表示该段是可以被截去的;Maxtime是每段的最长时长,如果写入这段本身的时长,表示该段在调整动画后是保留原动画效果的;如果写入0,则表示该段在调整动画后是做循环播放处理的;

(3)将步骤(1)获取的动态图片分段,包括以下三种情况:

(3-1)分成三段:将具有进场效果、中间动画和退场效果的动态图片分为三段:开始段、循环段和结尾段;

(3-2)分成两段,包括两种情况:

a、所述的动态图片动画通过进场效果+停留段来实现;

b、所述的动态图片动画通过进场效果+循环段或循环段+出场效果来实现;

(3-3)不分段,包括两种情况:

a、所述的动态图片的序列帧比较少,动画通过循环有限序列帧表现;

b、所述的动态图片的动画是连续性动画,即帧图片中物体每帧动画及坐标不一致;

(4)填写json配置表,具体包括以下子步骤:

(4-1)根据步骤(1)中获取的动态图片自带的帧填写帧数组frameArry,对动态图片自带的帧中循环或者停留的帧做优化:如果有循环的帧:剔除循环一次外与之对应的帧,这些帧的开始时间time不变,帧图片的序号pic填写循环一次相应的帧;

如果有停留的帧:保留开始停留的第一帧,剔除之后的帧,这些帧的开始时间time不变,帧图片的序号pic填写停留的第一帧序号;

(4-2)根据步骤(3)中不同的分段方案,填写不同的配置方案,不同的配置方案具有不同的延长和缩短方案,具体如下:(4-2-1)如果分成三段,动画延长方案如下:通过循环循环段,更新结束时间来实现,保留动画的完整性,循环段标识extendSection填写分段中的循环段的序号;

动画缩短方案如下:截去进场和出场动画,循环播放循环段动画来实现,开始段和结尾段的mintime写0,maxtime写本身段的时长;循环段mintime写X,maxtime写0;

(4-2-2)如果分成两段,根据步骤(3-2)中的第一种情况:动画通过进场效果+停留段来实现,在配置中timeArry中按开始段和停留段写入2段,通过extendSection标示停留段是增加循环次数实现动画延长的效果,而通过mintime和maxtime做截断停留段来实现缩短动画效果:开始段mintime写本身段的时长,maxtime写本身段的时长;停留段mintime写X,maxtime写0;

根据步骤(3-2)中的第二种情况:动画通过进场效果+循环段或循环段+出场效果来实现,延长动画时,通过extendSection标示循环段是增加循环次数,保留进场动画,更新结束时间实现动画延长的效果;缩短动画时,通过mintime和maxtime做截断开始段或结尾段mintime写X,maxtime写0;

(4-2-3)如果不分段:根据步骤(3-3)中的第一种情况:动画是一直循环该几帧来表现的,缩短/延长动画时长通过循环N次播放即可;

根据步骤(3-3)中的第二种情况:不能进行截断操作,通过缩短调整帧率Shrink来实现;

(4-3)完成json配置表的填写,将配置表json表放置在动态图片序列帧所处的文件夹中;

(5)显示动态图片:在媒介的动画显示层,调用json配置表,若没有进行延长或缩短操作,动画按照步骤(2)中json配置表中的帧数组frameArry填写的png序列帧开始时间对应的图片按顺序循环播放;

(6)调整动画时长:当延长或缩短动态图片的动画时长时,调用json配置表中步骤(4-

2)填写的参数extendSection,Shrink,mintime和maxtime实现调整后的动画效果。

说明书 :

一种调整动态图片动画时长的方法

技术领域

[0001] 本发明属于计算机技术领域,尤其涉及一种调整动态图片动画时长的方法。

背景技术

[0002] 目前,行业中的动态图片(gif动画)是由若干的png序列帧图片组成的,通过顺序播放序列帧图片,让原本静态的图片变的有生机;然而一个动态图片的动画由设计的序列帧,帧率所决定,播放的动画可扩展性被限制;如果将动态图片结合在某个媒介中,如视频或照片中,限制性将被放大,动画时长不能随意调整;比如Adobe公司推出的Premiere, After EffectsS 都是简单粗暴的调整帧率,或者截断动画来实现调整动画时长,这种方式破坏了动画的完整度和效果,所带来的添加动态图片乐趣性将大大的减少,结合到其他媒介中的扩展性不高。

发明内容

[0003] 为了克服现有的动态图片不能调整动画时长或简单的调整帧率或截断动画方案的局限性,本发明提供了一种调整动态图片动画时长的方法。
[0004] 本发明的目的是通过以下技术方案来实现的:一种调整动态图片动画时长的方法,包括以下步骤:
[0005] (1)获取动态图片:所述动态图片由若干张png序列帧图片组成;
[0006] (2)建立json配置表:所述json配置表包含以下信息:循环段标识extendSection;由帧图片的序号pic及该帧的开始时间time组成的帧数组frameArry;由每段的开始时间beginTime、结束时间endTime、调整帧率标识Shrink、最短时长mintime和最长时长maxtime组成的分段数组timeArry;根据动画效果,设定需要调整的段的最短时长X秒(不小于X秒);
[0007] (3)将步骤(1)获取的动态图片分段,包括以下三种情况:
[0008] (3.1)分成三段:将具有进场效果、中间动画和退场效果的动态图片分为三段:开始段、循环段和结尾段;
[0009] (3.2)分成两段,包括两种情况:
[0010] a.所述的动态图片动画通过进场效果+停留段来实现;
[0011] b.所述的动态图片动画通过进场效果+循环段或循环段+出场效果来实现;
[0012] (3.3)不分段,包括两种情况:
[0013] a.所述的动态图片的序列帧比较少,动画通过循环有限序列帧表现;
[0014] b.所述的动态图片的动画是连续性动画,即帧图片中物体每帧动画及坐标不一致;
[0015] (4)填写json配置表,具体包括以下子步骤:
[0016] (4.1)根据步骤(1)中获取的动态图片自带的帧填写帧数组frameArry,对动态图片自带的帧中循环或者停留的帧做优化:
[0017] 如果有循环的帧:剔除循环一次外与之对应的帧,这些帧的开始时间time不变,帧图片的序号pic填写循环一次相应的帧;
[0018] 如果有停留的帧:保留开始停留的第一帧,剔除之后的帧,这些帧的开始时间time不变,帧图片的序号pic填写停留的第一帧序号;
[0019] (4.2)根据步骤(3)中不同的分段方案,填写不同的配置方案,不同的配置方案具有不同的延长和缩短方案,具体如下:
[0020] (4.2.1)如果分成三段,动画延长方案如下:通过循环循环段,更新结束时间来实现,保留动画的完整性,循环标识extendSection填写分段中的循环段的序号;
[0021] 动画缩短方案如下:截去进场和出场动画,循环播放循环段动画来实现,开始段和结尾段的mintime写0,maxtime写本身段的时长;循环段mintime写X,maxtime写0(无限制);
[0022] (4.2.2)如果分成两段,根据步骤(3.2)中的第一种情况:动画通过进场效果+停留段来实现,在配置中timeArry中按开始段和停留段写入2段,通过extendSection标示停留段是增加循环次数实现动画延长的效果,而通过mintime和maxtime做截断停留段来实现缩短动画效果:开始段mintime写本身段的时长,maxtime写本身段的时长;停留段mintime写X,maxtime写0(无限制);
[0023] 根据步骤(3.2)中的第二种情况:动画通过进场效果+循环段或循环段+出场效果来实现,延长动画时,通过extendSection标示循环段是增加循环次数,保留进场动画,更新结束时间实现动画延长的效果;缩短动画时,通过mintime和maxtime做截断开始段或结尾段mintime写X,maxtime写0(无限制)。
[0024] (4.2.3)如果不分段:根据步骤(3.3)中的第一种情况:动画是一直循环该几帧来表现的,缩短/延长动画时长通过循环N次播放即可;
[0025] 根据步骤(3.3)中的第二种情况:不能进行截断操作,通过缩短调整帧率来实现;
[0026] (4.3)完成json配置表的填写,将配置表json表放置在动态图片序列帧所处的文件夹中;
[0027] (5)显示动态图片:在媒介的动画显示层,调用json配置表,若没有进行延长或缩短操作,动画按照步骤(2)中json配置表中的帧数组frameArry填写的png序列帧开始时间对应的图片按顺序循环播放;
[0028] (6)调整动画时长:当延长或缩短动态图片的动画时长时,调用json配置表中步骤(4.2)填写的参数extendSection, Shrink,mintime和maxtime实现调整后的动画效果。
[0029] 本发明的有益效果是:本发明预先给动态图片进行人为分段,通过配置json信息让动画时长变得可控,通过循环某段动画或者裁剪非核心段动画来延长或缩短动画的显示时长;这种方式突破了原有动画的固定时长所带来的局限性,让动态图片动画时长可变,灵活性变大,并且原本的率帧不会改变,动画顺序上保持原先的路径和效果,使得添加的动态图片能够完美融合到媒介中。

附图说明

[0030] 图1是定义动态图片动画分段的步骤流程图。

具体实施方式

[0031] 下面结合附图对本发明作进一步详细说明。
[0032] 本发明一种调整动态图片动画时长的方法,包括以下步骤:
[0033] (1)获取动态图片:所述动态图片由若干张png序列帧图片组成;考虑到实际效果,对最短时长做限制,根据动画效果来确定,保持在0.5-0.8秒内;最长时长没有限制。
[0034] (2)建立json配置表:所述json配置表包含以下信息:循环段标识extendSection;由帧图片的序号pic及该帧的开始时间time组成的帧数组frameArry;由每段的开始时间beginTime、结束时间endTime、压缩标识Shrink、最短时长mintime和最长时长maxtime组成的分段数组timeArry。
[0035] json配置表示例如下:
[0036] {
[0037] "extendSection":0,//对动态图片进行延长时长需要对某段进行循环的标识参数,其中段以0开始
[0038] "frameArry": [
[0039]                  {"time":0.0,"pic":0},
[0040]                  {"time":0.1,"pic":1},
[0041]                  {"time":0.2,"pic":2},
[0042]                  {"time":0.3,"pic":3},
[0043]                  {"time":0.4,"pic":4},
[0044]                  {"time":0.5,"pic":4},
[0045]                  {"time":0.6,"pic":4},
[0046]                  {"time":0.7,"pic":5},
[0047]                  {"time":0.8,"pic":6},
[0048]                  {"time":0.9,"pic":7},
[0049]                  {"time":1.0,"pic":8} //动态图片帧数和帧率[0050]                  ],
[0051]     "timeArry": [
[0052]                  {"beginTime": 0.0,"endTime":1.1"shrink":0,"minTime":0, "maxTime": 0.77 }
[0053] json配置表中,通过{"time":0,"pic":0}的方式将动态图片每帧的开始时间及显示时长以列表形式记录;通过timeArry将每段的开始时间、结束时间,是否可压缩,最短和最长时长的数据以段落形式记录;其中frameArry 中的Time是开始时间和帧率,pic是对应哪帧动态图片;延长动画通过配置表上方extendSection所填写的数值来确定循环timeArry中哪段动画;缩短动画通过timeArry中Shrink,mintime和maxtime三个参数来实现。
[0054] 缩短动画的实现原理:shrink标示0为不可压缩帧率,标示1为可以压缩帧率;Mintime是每段的最短时长,如果在该段写入这段本身的时长,说明该段是不能被截去的;
如果写入0则表示该段是可以被截去的;Maxtime是每段的最长时长,如果写入这段本身的时长,表示该段在调整动画后是保留原动画效果的;如果写入0,则表示该段在调整动画后是做循环播放处理的。
[0055] (3)如图1所示,将步骤(1)获取的动态图片分段,包括以下三种情况:
[0056] (3.1)分成三段:将具有进场效果、中间动画和退场效果的动态图片分为三段:开始段、循环段和结尾段;这种动态图片的动画效果主要是通过中间动画来表现,进出场段只是为了丰富动画效果而已。
[0057] (3.2)分成两段,包括两种情况:
[0058] a.所述的动态图片动画通过进场效果+停留段(停留某帧)来实现。
[0059] b.所述的动态图片动画通过进场效果+循环段或循环段+出场效果来实现。
[0060] (3.3)不分段,包括两种情况:
[0061] a.所述的动态图片的序列帧比较少,动画通过一直循环该几帧实现的。
[0062] b.所述的动态图片的动画是连续性动画,即帧图片中物体每帧动画及坐标不一致,不能进行截断操作。
[0063] (4)填写json配置表,具体包括以下子步骤:
[0064] (4.1)根据步骤(1)中获取的动态图片自带的帧填写帧数组frameArry,对动态图片自带的帧中循环或者停留的帧做优化,优化的好处是减少储存空间,可控性增大,具体如下:
[0065] 若动态图片本身中有循环帧:剔除循环一次外与之对应的帧,这些帧的开始时间time不变,帧图片的序号pic填写循环一次相应的帧,参考下面的配置(截取了部分png序列帧的数据)
[0066]                  {"time":0.5,"pic":5},
[0067]                  {"time":0.6,"pic":6},
[0068]                  {"time":0.7,"pic":7},
[0069]                  {"time":0.8,"pic":8},
[0070]                  {"time":0.9,"pic":9},
[0071]                  {"time":1.0,"pic":10},
[0072]                  {"time":1.1,"pic":5},
[0073]                  {"time":1.2,"pic":6},
[0074]                  {"time":1.3,"pic":7},
[0075]                  {"time":1.4,"pic":8},
[0076]                  {"time":1.5,"pic":9},
[0077]                  {"time":1.6,"pic":10}
[0078] 当动画播放到0.5-1.0秒时,是按png序列帧的顺序播放,而在动画时间1.1至1.6处重新播放第5-10帧的动画。
[0079] 若动态图片本身中有停留帧:保留开始停留的第一帧,剔除之后的帧,这些帧的开始时间time不变,帧图片的序号pic填写停留的第一帧序号;参考下面的配置:
[0080]                  {"time":0.0,"pic":0},
[0081]                  {"time":0.2,"pic":1},
[0082]                  {"time":0.4,"pic":1},
[0083]                  {"time":0.6,"pic":1},
[0084]                  {"time":0.8,"pic":1},
[0085]                  {"time":1.0,"pic":1}
[0086] 0.2至1.0秒内全部采用停留第“1”帧;而调整动画时长不一定按默认的动画来执行,比如本配置中默认动画就为停留了“1帧”,做调整后,可以循环整段来实现。
[0087] (4.2)根据步骤(3)中不同的分段方案,填写不同的配置方案,不同的配置方案具有不同的延长和缩短方案,具体如下:
[0088] (4.2.1)如果分成三段,动画延长方案如下:通过循环循环段,更新结束时间来实现,保留动画的完整性,循环标识extendSection填写分段中的循环段的序号;
[0089] 动画缩短方案如下:截去进场和出场动画,循环播放循环段动画来实现,开始段和结尾段的mintime写0,maxtime写本身段的时长;循环段mintime写0.5-0.8秒(根据动画需要),maxtime写0(无限制)。
[0090] (4.2.2)如果分成两段,根据步骤(3.2)中的第一种情况:动画通过进场效果+停留段(停留某帧)来实现,我们判断进场效果是必须保留的,而可以对停留帧做延长或缩短来实现调整时长功能;在配置中timeArry中按开始段和停留段写入2段,通过extendSection标示停留段是增加循环次数实现动画延长的效果,而通过mintime和maxtime做截断停留段来实现缩短动画效果:开始段mintime写本身段的时长,maxtime写本身段的时长;停留段mintime写0.5-0.8秒(根据动画需要),maxtime写0(无限制)。
[0091] 根据步骤(3.2)中的第二种情况:动画通过进场效果+循环段或循环段+出场效果来实现,这种动画的进场效果和出场效果本身不会影响到动画效果和整体连贯性;延长动画时,通过extendSection标示循环段是增加循环次数,保留进场动画,更新结束时间实现动画延长的效果;缩短动画时,通过mintime和maxtime做截断开始段或结尾段mintime写0.5-0.8秒(根据动画需要),maxtime写0(无限制)。
[0092] (4.2.3)如果不分段:根据步骤(3.3)中的第一种情况:动画是一直循环该几帧来表现的,缩短/延长动画时长通过循环N次播放即可;
[0093] 根据步骤(3.3)中的第二种情况:不能进行截断操作,通过缩短调整帧率来实现。
[0094] (4.3)使用文字编辑器完成json配置表的填写,将配置表json表放置在动态图片序列帧所处的文件夹中。
[0095] (5)显示动态图片:动态图片放置在某个媒介中,视频或图片等媒体方式;在媒介的动画显示层,调用json配置表,若没有进行延长或缩短操作,动画按照步骤(2)中json配置表中的帧数组frameArry填写的png序列帧开始时间对应的图片按顺序循环播放。
[0096] (6)调整动画时长:当延长或缩短动态图片的动画时长时,调用json配置表中步骤(4.2)填写的参数extendSection, Shrink,mintime和maxtime实现调整后的动画效果。
[0097] 本发明的描述是为了示例和描述起见而给出的,并不是无遗漏的或者将本发明限于所公开的形式;很多算法和实现方式对于本领域的普通技术人员而言是显然的;选择和描述实施例是为了更好说明本发明的原理和实际应用,并且是本领域的普通技术人员能够理解本发明从而设计适用于特定用途的带有各种修改的各种实施例。