PHP停解析swf文件头
PHP下解析swf文件头
近日,在
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
???????另外,在国外的许多网站上可以找到相关的内容,这里提供两个有代表性的地址,有兴趣的朋友可以去看看。?
本文转自:http://www.5uflash.com/flashjiaocheng/Flashyingyongkaifa/825.html

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

1bit等於八分之一個位元組。二進制數係統中,每個0或1就是一個位元(bit),位元是資料儲存的最小單位;每8個位元(bit,簡寫為b)組成一個位元組(Byte),因此「1位元組( Byte)=8位元(bit)」。在多數的電腦系統中,一個位元組是一個8位元(bit)長的資料單位,大多數的計算機都用一個位元組表示一個字元、數字或其他字元。

swf是一種基於向量的Flash動畫檔案格式,被廣泛應用於網頁設計、動畫製作等領域,swf檔案通常也被稱為Flash檔案。一般用FLASH軟體創作並產生SWF檔案格式,也可以透過對應軟體將PDF等類型轉換為SWF格式;swf可以用Flash Player打開,瀏覽器必須安裝Flash Player外掛。設計人員和開發人員可使用它來建立簡報、應用程式和其它允許使用者互動的內容。

1byte等於8bit。資料儲存是以「位元組」(Byte)為單位,資料傳輸大多以「位元」(bit)為單位,一個位元代表一個0或1(即二進位),每8個位元(bit)組成一個位元組(Byte),是最小一級的資訊單位;因而,「1Byte=8bit」。

本文redis試驗程式碼基於以下環境:作業系統:MacOS64位元版本:Redis5.0.764bit運行模式:standalonemoderedis位元操作reids位元操作也叫位元組操作、bitmap,它提供了SETBIT、GETBIT、BITCOUNT、BITTOP四個指令用於操作二進位位數組。先來看一波基本操作範例SETBIT語法:SETBITkeyoffsetvalue即:指令key偏移量0/1setbit指令用於寫入位元組指定偏移量的二進位位元設定值,偏移量從0開始計數,且只允許寫入1或0,

2025年十大虛擬貨幣交易平台:1、幣安;2、OKX;3、gateio;4、bitget等等;在選擇交易所時,建議您根據自身需求和偏好,綜合考慮安全性、交易費用、用戶體驗等因素,選擇最適合您的平台。

CentOS是Linux的一種發行版,起源於RHEL,並依照開放原始碼的規定釋出原始碼進行編譯。而且它與RHEL在功能上保持相容性,是一個免費、開源的作業系統,用戶可以在不支付版權費用的情況下使用並進行修改。那麼Linux中CentOS區分32和64位嗎?具體請看下文。 CentOS區分32位元和64位元! 主要區別: CentOS32bit系統主要針對PC而發布的; CentOS64bit系統主要針對大型的科學計算; 64bitLinux系統主要安裝64bit系統主要針對大型的科學計算; 64bitLinux系統主要安裝64bit系統上1 2]

1位元組等於8位元(bit)。二進制數係統中,每個0或1就是一個位元(bit),位元是資料儲存的最小單位;每8個位元(bit,簡寫為b)組成一個位元組(Byte),因此「1位元組( Byte)=8位元(bit)」。在多數的電腦系統中,一個位元組是一個8位元長的資料單位,大多數的計算機都用一個位元組表示一個字元、數字或其他字元。

Pi幣深度解析:機遇與挑戰並存的加密貨幣Pi幣(π),這款備受關注的加密貨幣,自2018年誕生以來,便以其獨特的“手機挖礦”機制吸引了全球超過4700萬用戶。本文將深入探討Pi幣的基本信息、生態系統、應用場景以及圍繞其產生的爭議,幫助您全面了解這款備受爭議的數字資產。 Pi幣核心信息中文名稱:派幣英文名稱:Pi幣、π幣常用縮寫:π官網:https://minepi.com/創始人:NicolasKokkalis(技術負責人,斯坦福大學博士)和Chengdiao
