APP下载

基于嵌入式应用的 SWF文件文本信息的提取研究*

2010-11-04李丽华毛淑华魏树权

长沙大学学报 2010年2期
关键词:字节嵌入式标签

李丽华,毛淑华,魏树权

(东华理工大学信息与电子工程学院,江西抚州 344000)

基于嵌入式应用的 SWF文件文本信息的提取研究*

李丽华,毛淑华,魏树权

(东华理工大学信息与电子工程学院,江西抚州 344000)

在嵌入式多媒体技术中,如何实现从 SWF文件中获取有用的媒体信息十分重要.我们以 ARM9+uCLinux为研究平台,在分析 Flash动画的技术特征、解析 SWF文件的构成格式的基础上,提出了一种能够在嵌入式平台上解析 SWF标签,实现文本信息提取的算法.

嵌入式系统;SWF文本提取;动画;静态文本

Flash是Web上重要的多媒体动画技术,是一种交互式矢量多媒体技术.Flash的前身 Future Splash是早期互联网上流行的矢量动画插件.自Macromedia公司收购了 Future splash以后便将其改名为 Flash2,一直到现在的 Flash MX.目前,互联网上已经有成千上万的 Flash站点,世界上很多大企业都不约而同地采用 Flash技术作为其用户界面的核心,如著名的微软MSN新闻站、迪士尼官网等就采用了大量的 Flash动画.Macromedia还有专门的Shockwave站点,全部采用了 Shockwave Flash和 Director.

近年来,消费类电子产品成为世界电子产业的发展潮流,而嵌入式多媒体平台在消费类电子产品中起到核心的作用,获得了巨大的发展空间,如可视电话、PDA、电子词典、机顶盒、数字相机、多媒体手机、导航仪器等[1].在这些潮流应用中,产品是否能够支持丰富多彩的音视频、动漫播放以及动漫游戏成为产品的核心发展方向[2].

对于 Flash动漫技术在嵌入式多媒体平台中的应用来说,怎样实现从 SWF文件中获取自己需要的媒体信息十分重要.本文以提取 SWF文件中的文本信息为例,介绍其实现原理并进行算法设计,在嵌入式平台中得以正确实现.

1 flash动画介绍

Flash动画技术具有以下重要特点:

(1)它是基于矢量的图形系统,各元素都是矢量的,只需使用少量的向量数据就可以很好地描述一个复杂对象,而其占用的存储空间比位图要小很多,同时,矢量图像可以做到真正的无级放大,无论用户界面使用多大的窗口,图像始终可以完全显示,并且不会明显降低画面质量.

(2)Flash所生成的 SWF文件的播放可以很容易地跨平台播放,而不必像 Java那样需要启动虚拟机支持播放.另外,Flash生成的动画一般都很小,所以,调用的时候速度很快.

(3)它还提供其他的一些增强功能,支持位图、声音、渐变色、Alpha、透明等.

(4)Flash动画其实是一种“准”流 (stream)形式文件.用户观看一个大动画的时候,可以不必等到影片全部传送到本地端再观看,而是随时可以观看,实现即达即播.

(5)使用 Flash能够很容易地生成 AV I或者GIF动画文件.

以上这些重要特征使得 Flash动画非常适合在网络上和数字媒体中使用.

2 SWF文件格式分析

Flash在网络上最终体现为 SWF格式的动画文件.如果需要从 SWF文件中提取媒体信息,也需要了解 SWF格式的详细信息,先对 SWF文件进行解析.

SWF文件格式由文件头和许多个标签组成,最后以一个特殊的结束标签来结束文件,其基本结构见下图 (如图 1所示):

图1 SWF文件的基本结构

SWF动画文件中的标签由两部分组成:标签头和标签内容[3,4].根据标签内容的长度不同,标签头又分两种:短型标签头和长型标签头[5].当标签的内容长度不超过 62个字节时,标签采用短型标签头;大于等于 63个字节时采用长型标签头.短型标签头占 2个字节,长型标签头占 6个字节,因此,计算标签结束的位置时需要加上标签头的字节数.

SWF动画文件的文件头部是由一个三字节的标识符开始 ,为 0x46、0x57、0x53(“FWS”)或者0x43、0x57、0x53(“CWS”).“FWS”标识符说明该文件是未压缩的 SWF文件,“CWS”标识符则说明该文件前 8个字节之后 (即文件长度字段之后)的全部数据为开源的标准 ZL I B方式压缩.标识符之后是版本号,版本号占用一个字节的空间,采用数字的形式描述,例如,对应于 Flash 8采用的是 0x08标识.接下来是文件长度字段,对应于未压缩的 SWF文件,其长度字段应该是和文件大小恰好匹配.对应于 Flash来说,在创建 flash文件时,如果只是单纯的设置场景的背景色及场景的长度与宽度,则所生成的 SWF文件默认采用 FWS形式存储,生成的文件大小为 36字节,对应的文件长度字段的值为0x24、0x00、0x00、0x00.接下来是 RECT字段 ,该字段采用 SWF文件格式规范中定义的“位值”(bit_value)进行存储,这种存储特征是可以节约字节数的,但数值是跨字节的.该段存储内容是使用“twip”(1 pixel=20twips)为单位,表示播放窗口的尺寸.分为N bits,表示后面字段的 bit_value位长;Xmin,Xmax,Ymin,Ymax分别表示 X、Y轴方向上的最小和最大值.

以 68 00 1F 40 00 07 D0 00 00为例进行分析:以上十六进制代码转化为 2进制为:01101000 00000000 00011111 01000000 00000000 00000111 11010000 00000000 00000000(这里使用下划线仅表示分段).Xmin=0,Xmax=4000,Ymin=0,Ymax=4000,由此可以算出舞台的宽度为 (4000-0)/20=200象素,高度为 (4000-0)/20=200象素.

在获取 SWF文件的相关信息时,首先提取 SWF的文件头信息:文件头、压缩标识、文件版本、文件长度、舞台大小、帧数、帧率等,获取动画的总体特征;然后依次提取文件主体包含的所有标签,直到标识文件结束的 END标签.

依据以上对 SWF动画文件格式的分析,对 SWF文件的解析应按照如下方式进行:

(1)读取前 3个字节,通过 ASCII码翻译成字母,以判断 SWF文件是否采用压缩格式存储,接下来取第 4个字节的值,获得 SWF文件格式的版本,在这里记录下 SWF文件是否压缩和其版本,获取文件的长度信息等,为后面进行的标签解析做好准备;

(2)继续读取信息直到 SWF文件头结束,在读取信息的过程中要根据前面获取的压缩标记来决定是否对信息进行解压,最终将获取到所有的标签信息.

3 文本信息提取算法

Flash中的文本除了字体、字号等基础属性外,还包括一些效果如旋转、缩放等动画效果.在 SWF文件中,用定义标签来定义文本的基础属性,用控制标签来定义动画效果.Flash动画的文本对象是矢量格式的,可以根据 SWF文件的结构特征,利用内容分析的方法,通过数学计算从定义型标签中提取出文字,并通过从控制型标签中提取动态效果.在这里主要的工作是提取 SWF文件中的文本信息,所以对应于控制标签的效果可以不用考虑,直接可以跳过对应的控制标签.

Flash中的文本分为三种类型:静态文本、动态文本、输入文本.输入文本可以看成动态文本的一种特殊形式.静态文本使用 DefineText标签、动态文本使用 DefineEditText标签.而 SWF中支持两种文本:定义文本和设备文本.其中定义文本使用 DefineFont、DefineFont2或 DefineFont3标签.设备文本同时使用 DefineFont和 DefineFontInfo标签,或者DefineFont2标签.

根据以上分析,针对 Flash动画文件进行文本信息的提取,应当考虑如下两个方面的问题:

(1)静态文本:Flash中的静态文本描述了文本的字体、大小、颜色等文本的相关信息.一般情况下,静态文本涉及到DefineText和 TextRecords标签.

(2)动态文本和输入文本:定义动态文本对象和输入文本对象使用 DefineEditText标签,这个标签中定义了动态文本的边界、是否设定了动态文本的初值和文本周围是否限制边框等信息,定义动态文本中的字体类型,采用的是 DefineFont2标签.

依据 SWF文件“首部 ->标签 ->…->标签->结束标签”的结构,确定文本信息的提取算法应当分为以下几个步骤进行:

(1)SWF文件头解析,根据文件头信息获取文件的版本信息和压缩信息;

(2)遍历整个 SWF文件,正确解析每个标签的头部信息,针对文本类标签完整地解析整个标签;

(3)根据获取到的文本标签的信息,提取文本;

(4)正确地结束解析过程.

其算法流程如图所示:

图2 文本信息提取算法流程图

SWF文件文本信息提取算法的解析如下:

(1)取得标签首部字段,判断是否合法的标签;如果合法,则获取其标签首部信息,即获得标签的类型值和标签长度,接下来执行 (2);如果不合法则报错,执行 (5);如果为 End标签,执行 (5);

(2)根据标签类别选择相应的处理方式,如果不是文本信息存储所涉及到的标签,则可以直接根据获取到的标签长度直接跳过;如果获取到的是DefineFont、DefineFont2、DefineFont3这一类标签 ,则需要详细解析,以获取到相应的文本信息;

(3)如果获取到了文本信息,则进行保存;

(4)将读取指针指向下一个标签,执行 (1);

(5)结束.

根据嵌入式多媒体平台软件的开发特点,结合SWF动画文件的特征,在 ARM9+uCLinux平台上,使用 C语言进行编码,实现了以上算法,因此正确地实现了对 SWF动画中的文本信息提取.

4 总结

本文提出了一种适合在嵌入式多媒体平台上提取 SWF文件中文本信息的方法,同时为嵌入式平台处理 SWF动画中的其他信息指明了技术方向.可以说,通过对 SWF文件中各项信息的提取,为实现基于 Flash动画内容的索引、基于内容的 Flash动画检索带来了新的发展途径.

[1]田华健,等.一种嵌入式 SWF解码器的设计与实现[J].计算机技术与发展,2009,19(5):198-201.

[2]沈静,等.移动 Flash播放器的设计与实现 [J].计算机系统应用,2009,23(2):83-86.

[3]刘菲,等.Flash动画的内容特征分析与图像信息提取研究[J].现代教育技术,2009,19(12):91-94.

[4]SWF File For mat Specification(Version 10)[EB/OL].http://www.adobe.com/devnet/swf/?promoid=DJHD H,2009-05-15.

[5]刘磊.Flash动画的内容分析与特征提取研究 [D].济南:山东师范大学,2008.

TP391

A

1008-4681(2010)02-0065-03

2010-03-22

东华理工大学校长基金 (批准号:DHXK0916)资助项目.

李丽华 (1982-),女,河北临西人,东华理工大学信息与电子工程学院助教,硕士生.研究方向:计算机图形学与计算机网络技术.

(责任编校:简子)

猜你喜欢

字节嵌入式标签
No.8 字节跳动将推出独立出口电商APP
No.10 “字节跳动手机”要来了?
无惧标签 Alfa Romeo Giulia 200HP
不害怕撕掉标签的人,都活出了真正的漂亮
搭建基于Qt的嵌入式开发平台
简谈MC7字节码
嵌入式软PLC在电镀生产流程控制系统中的应用
标签化伤害了谁
科学家的标签
Altera加入嵌入式视觉联盟