swf是Macromedia公司的动画设计软件Flash的专用格式,是一种支持矢量和点阵图形的动画文件格式,被广泛应用于网页设计,动画制作等领域,swf文件通常也被称为Flash文件。
SWF文件结构:
swf文件的整体结构是 header + body的组成。
文件的开始是一个[文件头]
它的结构如下:
字节 名称 说明
1 Signature
“F”表示非加密格式,”C”表示加密格式
1 Signature “W”无特殊意义
1 Signature “S”无特殊意义
1 Version 版本号,它表示对应播放器版本
4 FileLength 整个文件长度,低位在前
N FrameSize
RECT结构体,表示屏幕大小,具体结构和长度根据数据变化,分析方法另外讨论。
2 FrameRate 帧频,默认为12,高位在前
2 FrameCount
帧数,表明文件根下的帧数,低位在前
以上是swf中,最简单的一个tag,一个完整的swf文件是由很多独立的tag组成的。每一个tag都包括一个头和一个数据体,头有2种类型,短tag型和长tag型。
短tag型由2byte构成,前10个bit表示tag类型,后6个bit表示tag长度。
长tag型由6byte构成,前10个bit表示tag类型,后6个bit固定为全1,后4个byte代表tag长度。
tag的长度不同于文件头的长度FileLength,它是除去tag头后的长度。
(另外)只有非加密的swf文件可以直接用以上的方法解析,加密的文件需要另外增加一步处理。具体方法由于牵涉到版权问题,这里我不加说明。
这份资料可能对flash设计意义不大,但如果有人用的着,我会继续分析一下,如果有人也在做这方面的调查,欢迎和我一起讨论。
第2节
前节说明了swf文件是由1个head和1个body构成的。
并且解析了header的结构,和一个tag的header部分的简单说明。
下面余下的就是swf文件的body了。
整个文件body是由大量的tag组成的,通过分析tag的head部分,可以立刻知道这个tag的类型代码和长度。
如果你无法识别这个tag的类型,也可以利用tag的长度,直接跳过这个tag。
这种方式保证了版本的兼容性,即使出现了新的tag,老版本的播放器还是能够解析完整个swf文件而不出现错误,大不了就是不能提供新的功能而已。
以下就是swf文件结构的一个形象概念。
(文件header)(文件body)
|
(tag 1)(tag 2)(tag 3)(……)
|
(tag header)(tag body)
|
(tag 类型代码)(tag 长度)
这样大家是否对swf文件的结构有了一个基本的认识?
下一节我会分析一下几个swf必有的tag,包括
backgroundColor tag,showFrame tag和end tag
第3节
setBackgroundColor tag
这个tag是直接跟在文件head后面的第一个tag,是文件中必然存在的。
它的结构如下:
长度(bit) 名称 说明
16 header tag头,短tag型
类型码为9
24 BackgroundColor
RGB类型,右3个字节,分别表示红、绿、蓝
showFrame tag
这是文件最后第2个tag,它是必然存在的。
结构如下:
长度(bit) 名称 说明
16 header tag头,短tag型
类型码为1
end tag
结束tag,它的作用不用我说了,必然是文件的最后一个tag。
长度(bit) 名称 说明
16 header tag头,短tag型
类型码为0
下一节我将讲的是character ID
和Depth的意义和textField的基本tag组成。
(另外)感谢AOL的补充和解释。
第4节
一个textField就是一个文本框,文本框有3种,静态的,动态的,和输入型。作为tag的话,它只有2种,静态的和动态的,输入型不过是动态的一种特别形式。
这里讨论动态文本框的组成。
它由3个tag组成,2个定义tag和一个控制tag
分别是:
定义tag DefineFont2 DefineEditText (针对player 7.0
如有不同情况请检查播放器版本)
控制tag PlaceObject2
DefineFont2 定义了一个字体信息,
DefineEditText引用了定义的字体,并定义了显示的文字信息,而PlaceObject引用了定义的文字信息,并控制了文字的显示。
他们之间的引用就是依靠character ID进行的。
character
ID就是一个从1开始的数字标示,如果中间出现缺漏,从缺漏开始的所有character
ID都被忽略,而重复的话,后出现的将覆盖先出现的tag。
DefineFont2用一个character ID
来标示自己,DefineEditText和PlaceObject2也同样如此。但并不是所有的tag都有character
ID。
另外,PlaceObject2虽然也有character
ID,但它并不是用来标示自己的,而是用来调用的。
而深度Depth在3个tag中只有PlaceObject2拥有。
这3个tag的关系就是这样。这3个tag的结构我会在下节中说明。(抱歉,每次都说一点点!)
第5节
DefineFont2
这个tag的作用是定义一个字体,或者一组静态轮廓字,用以给DefineEditText使用。
关于文字的几乎所有信息,都可以在这个tag中进行设置,因此,这也是一个相当复杂的tag。
它的结构如下:
长度(bit) 名称
说明
headerLength header
tag头,类型码为48
16 FontID character
ID,唯一的标示
1 FontFlagsHasLayout
根据字面解释,判断是否有变型的标记
1 FontFlagsShiftJIS
是否使用ShiftJIS编码
1 FontFlagsSmallText
是否使用小字体显示
1 FontFlagsANSI 是否使用ANSI编码
1 FontFlagsWideOffsets
是否使用32位偏移量
1 FontFlagsWideCodes
是否使用16位文字编码
1 FontFlagsItalic
文字是否是斜体
1 FontFlagsBold
文字是否是粗体
8 LanguageCode
语言编码,有相应的编码表对应
8 FontNameLen 文件名长度
FontNameLen*8 FontName
文件名称(使用utf8编码)
16 NumGlyphs 轮廓字个数
32/16 OffsetTable
根据FontFlagsWideOffsets,为32位,否则为16位
32/16 CodeTableOffset 同上
不定*NumGlyphs GlyphShapeTable
轮廓字信息,为shape结构(又是一个复杂结构)
16/8 CodeTable
根据FontFlagsWideCodes,为16位。编码表,为固定值UCS-2
16/0 FontAscent
根据FontFlagsHasLayout,为16位,否则没有该字段
16/0 FontDescent
根据FontFlagsHasLayout,为16位,否则没有该字段
16/0 FontLeading
根据FontFlagsHasLayout,为16位,否则没有该字段
16/0*NumGlyphs FontAdvanceTable
根据FontFlagsHasLayout,为16位,否则没有该字段
RECT*NumGlyphs FontBoundsTable
根据FontFlagsHasLayout,为16位,否则没有该字段
16/0 KerningCount
根据FontFlagsHasLayout,为16位,否则没有该字段
KERNINGRECORD*KerningCount
FontKerningTable
根据FontFlagsHasLayout,为16位,否则没有该字段
如果单纯分析动态文本的这个tag的信息,只需要分析到上面的fontName部分就足够了,其他信息只对轮廓字,也就是静态文字有效。
那是flash
用Adobe flashiplayer 9 就可以了
或者楼上的暴风
快乐影音也可以的
参考资料:http://zhidao.baidu.com/question/46875577.html
swf格式是Flash吧,用Flash player,没有的话,就直接用IE也可以。在文件上直接点击右键,选择打开方式为:IE
你下载一个FALSH PLAYER播放器,大小在1M左右。无需安装,所有的文件就一个FLASH播放器的图标。
迅捷视频转换器
支持各种音频、视频格式转换,有电脑版、手机版方便用户在各种设备上使用,操作起来也是非常的简单。
视频格式:QLV、QSV、MP4、MOV、MKV、AVI、WMV、M4V、MPG、VOB、WEBM、OGV、3GP、FLV、F4V、SWF、GIF
音频格式:MP3、WAV、M4A、AAC、FLAC、APE、M4R、OGG、WMA、AC3
QLV和QSV视频格式转码完成后即可转换成其他视频格式。
若只是转换小文件,又不想在电脑或手机上安装软件的话,那还可以选择在线转换视频格式
视频格式转换对于很多人平时工作娱乐来说都是经常要用到的操作,上面介绍的两个工具相信对于需求视频格式转换的朋友来说还是很有帮助的。
用IE可以直接可以,在swf文件上右键-打开方式-选择程序-Iexplorer浏览器 即可