首頁 後端開發 php教程 PHP停解析swf文件头

PHP停解析swf文件头

Jun 13, 2016 am 10:58 AM
bit 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

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

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

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

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

熱門話題

Java教學
1664
14
CakePHP 教程
1423
52
Laravel 教程
1321
25
PHP教程
1269
29
C# 教程
1249
24
1bit等於多少位元組 1bit等於多少位元組 Mar 09, 2023 pm 03:11 PM

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

swf是什麼檔案格式 swf是什麼檔案格式 Jul 20, 2022 pm 04:03 PM

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

1byte等於多少bit 1byte等於多少bit Mar 19, 2021 pm 02:52 PM

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

如何使用redis的bit位操作 如何使用redis的bit位操作 May 26, 2023 pm 02:14 PM

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

2025年十大虛擬貨幣交易平台:一目了然的選擇 2025年十大虛擬貨幣交易平台:一目了然的選擇 Feb 25, 2025 pm 12:12 PM

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

Linux如何查看系統是32位元還是64位元? Linux如何查看系統是32位元還是64位元? Mar 01, 2024 pm 07:34 PM

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

1位元組等於多少bit 1位元組等於多少bit Mar 02, 2023 pm 03:44 PM

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

Pi幣是什麼?哪裡能交易?為何有人說它是詐 騙? Pi幣有什麼用? Pi幣是什麼?哪裡能交易?為何有人說它是詐 騙? Pi幣有什麼用? Mar 04, 2025 am 07:33 AM

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

See all articles