`
sealbird
  • 浏览: 584606 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

PHP下解析swf文件头

    博客分类:
  • Flex
阅读更多
本文转自: http://www.dssky.net

近日,在CSDN论坛上 看到一个帖子,想要实现用PHP来得到swf文件帧数的功能,一些网友回复说不可能,其实是他们对swf文件格式不了解,swf文件格式规范是开放的,而 且也可以找到相当多的关于直接用PHP处理swf文件的,包括解析文件头,生成swf文件等。利用闲暇时间,我也写了一个粗陋的解析swf文件的类。
要想解析swf文件头,首先要弄清楚的当然是swf文件格式规范。规范中对swf文件格式作了详细的说明。关于swf文件头,它是由以下几个部分组成:
+-------+---+--------+--------+---+----+
|文件标识|版本|文件大小|RECT字段|帧频|帧数|
+-------+---+--------+--------+---+----+
其中“文件标识”为3个字节,包括文件压缩标志。这3个字节的内容为“FWS”或“CWS”,以‘C’开头的表示swf文件是采用的压缩输出(从RECT字段开始至文件结尾,采用Zlib标准进行文件压缩)。
“版本”为一个字节,存储8位字长的无符号整数,将swf文件的导出版本以16进制方式存储在该字节,如导出版本为7,则该字节存储值为0x07,而不是‘7’对应的ASCII值(0x37)。
“文件大小”存储占用4个字节,为32位无符号整数,将未压缩的swf文件大小以16进制形式存入该4个字段,值得注意的是,swf文件存储是按照 little-endian,即低字节在前的“小尾”方式存储的,解析时,需要注意字节序。如一个swf文件大小为471字节,则该4个字节,由低位到高 位,存储的内容将是0xd7,0x01,0x00,0x00。
“帧频”占用两个字节,表示每秒播放的帧数,存储方式是8.8共16位的定点数,整数部分在高位(即第二个字节),小数部分在低位(第一个字节),并按字 节对齐。如小数7.5表示为16进制是0x07.80,按照低位在前,高位在后表示,这16位将存储为如下的2进制代码10000000 00000111。
“帧数”占用两个字节,为16位无符号整数,表示swf文件的总帧数。存储方式类似于“文件大小”存储方式。
难理解的是RECT字段,该字段采用swf文件格式规范中定义的“位值”(bit_value)进行存储的,这种存储特征是可以节约字节数,但数值是跨字 节的。该段存储内容是用‘twip’(翻译为‘缇’,1pixel = 20twips)单位表示的播放窗口的尺寸。分为Nbits,表示后面字段的bit_value位长;Xmin,Xmax,Ymin,Ymax分别表示 X,Y轴方向上的最小和最大值。
先说一下bit_value,其特点是不管字节区分,按照最小位数(bits)将值连续存储,在末字节中空位补0,比如两个9位表示的无符号值7,8将占用3个字节,表示为2进制就是:
00000011 10000010 00000000
将3个字节按位连在一起,前9位值为7,再9位值为8,在第3个字节的其他空位全部补0。简单了解了bit_value表示方式,再说RECT结构,该字 段前5位(bit)为Nbits字段,表示后面字段的bit_value位长,是一个无符号数,也就是说最大值为为31,如此一来,整个RECT字段的最 大长度为17个字节,也就是说swf文件头最大不超过29个字节。通过Nbits字段得到后面字段的bit_value位长后,就可以确定RECT的具体 长度,继而得知“帧频”和“帧数”的存储位置。在RECT字段中,从第6位开始,存储的是播放窗口的尺寸数据,根据Nbits值,将后面的部分按位分开计 算,即可得到相应值。但对文件标识为“CWS”的swf文件,从“文件大小”字段后面开始(即从第8个字节后面开始),是按照Zlib标准压缩存储的,所 以,在解析swf文件头时,首先需判断swf文件是否按照压缩格式导出的。如果是以压缩格式导出的,则需先对头8个字节后面的内容进行解压缩处理了,再来 处理RECT字段和“帧频”和“帧数”字段。
下面给出我写的swf文件头解析类及实例压缩包的地址:
swfHeaderParser
另外,在国外的许多网站上可以找到相关的内容,这里提供两个有代表性的地址,有兴趣的朋友可以去看看。
关于用php解析swf文件头:
http://www.zend.com/codex.php?id=1382&single=1
关于用php生成swf文件:
http://freemovie.sourceforge.net/
相关日志
PHP服务器平台快速搭建程序....

分享到:
评论

相关推荐

    swfheader php读取swf文件头信息

    总的来说,PHP解析SWF文件头信息的能力是一个实用的技术点,尤其对于处理与Flash相关的Web内容时。通过对`swfheader.class.php`和`swfheadertest1.php`进行学习和研究,我们可以深入理解SWF文件格式,并提升在处理...

    swf文件上传和下载

    SWF文件,全称Small Web Format,是一种由Adobe Flash创建的多媒体文件格式,常用于网页上的动画、游戏或交互式应用程序。本主题聚焦于SWF文件的上传与下载,这在Web开发中是两个关键的操作。 一、SWF文件上传 1. ...

    php读取flash文件高宽帧数背景颜色的方法

    在PHP中,要读取Flash(SWF)文件的高宽、帧数和背景颜色等信息,可以使用自定义类来解析SWF文件的二进制数据。以下是一个实例,展示了如何实现这一功能: 首先,我们需要创建一个名为`flash`的类,这个类将包含...

    php获取flash尺寸详细数据的方法

    如果你还想着通过解析swf文件头信息来获取flash文件的尺寸信息,那真的有点走远了,因为从PHP 4开始已经内置getimagesize函数来做这个事,其功能测定任何 GIF,JPG,PNG,SWF,SWC,PSD,TIFF,BMP,IFF,JP2,JPX,JB2,JPC,XBM ...

    php+flash 图片上传源代码

    在“php+flash 图片上传源代码”中,Flash部分可能包含一个ActionScript编写的SWF文件,它使用FileReference对象监听用户的文件选择事件,当用户选择图片后,会触发upload()方法,将图片文件以二进制数据的形式发送...

    UCenter1.6头像上传破解版源码(uc_camera_v1.0)

    并修改com\comsenz\camera\v4\model\vo\Params.as的第9行_baseURL属性的值为Web端的URL地址,并保存按Ctrl+Enter导出并运行camera.swf文件,即可上传头像与调试啦。 4.类库下载地址: TweenLite10.092 ...

    仿新浪微博上传头像功能,头像上传组件,在线头像上传,在线拍摄头像

    - `face.swf`:SWF文件是Adobe Flash的格式,可能是一个旧版的头像裁剪工具,使用Flash技术实现。 - `使用前请看下.txt`:这是一个文本文件,很可能包含了使用组件前需要注意的事项或指南。 5. **前端技术**:...

    Flash在线制作头像的系统源码

    1. Flash源文件(.fla或.swf):这是Flash动画的原始文件,包含了所有图形、动画和交互逻辑。用户可以通过Flash编辑器打开并查看或修改源代码。 2. PHP脚本:可能包括处理上传、保存和下载头像的PHP文件,以及与...

    头像处理flash

    4. **相关文件解析**: - `index.html`:这是主网页,包含Flash对象和相关JavaScript代码,用于与Flash组件通信。 - `Image.class.php`:可能是一个PHP类,封装了图像处理的逻辑,如读取、处理和保存图片。 - `...

    php中使用getimagesize获取图片、flash等文件的尺寸信息实例

    从PHP 4开始,此函数被扩展以支持Flash文件,这意味着你可以直接获取Flash文件的宽度和高度,而无需解析SWF文件头信息。例如: ```php print_r(getimagesize('path/to/yourfile.swf')); ``` 此功能极大地简化了与...

    discuz头像上传

    本文将深入探讨如何实现Discuz头像上传功能,并解析与之相关的文件及其作用。 首先,我们来看一下提供的压缩包文件: 1. **noavatar_big.gif、noavatar_middle.gif、noavatar_small.gif**:这些文件是默认无头像的...

    flash上传头像裁剪头像

    这通常涉及服务器端语言如PHP、Java或ASP.NET等,它们接收文件流,保存图片,同时处理Flash发送的裁剪信息,生成裁剪后的图片。服务器端的安全性也非常重要,防止非法文件上传和数据泄露。 7. **前端与后端通信**:...

    php结合web uploader插件实现分片上传文件

    //swf文件路径 swf:'uploader.swf', //文件接收服务端。 server:upload.php, //选择文件的按钮。可选。 //内部根据当前运行是创建,可能是input元素,也可能是flash. pick:'#picker', chunked:true, chunk...

    仿微博头像上传.net版本

    - `face.swf`:这是一个Flash文件,可能用于在不支持HTML5文件上传的旧浏览器中提供上传功能。Flash允许在用户界面中选择文件,然后通过Flash的API与服务器通信,上传选定的文件。 6. **业务逻辑修改**: - 根据...

    java文件上传

    文件上传允许用户将本地文件发送到服务器,这在各种场景下都非常有用,比如用户上传头像、提交作业或者分享大文件。本篇文章将深入探讨Java中的文件上传机制,以及如何利用SWFUpload和ExtJS这两个流行的前端库来实现...

    nginx场景配置与常见错误解析

    location ~* \.(jpg|jpeg|png|gif|swf)$ { valid_referers none blocked $http_referer; if ($invalid_referer) { return 403; } } ``` ### 代理服务 #### 正向代理 - **原理**:客户端通过代理服务器向目标...

    PHPCMS 修改flash附件上传 改为H5上传

    4. **服务器端接收**:在PHP端,你需要更新接收文件的脚本,以正确解析`multipart/form-data`格式的数据。使用`$_FILES`全局数组获取上传文件的信息,如文件名、大小、类型等,并确保上传过程的安全性,例如检查文件...

Global site tag (gtag.js) - Google Analytics