• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            S.l.e!ep.¢%

            像打了激速一樣,以四倍的速度運轉(zhuǎn),開心的工作
            簡單、開放、平等的公司文化;尊重個性、自由與個人價值;
            posts - 1098, comments - 335, trackbacks - 0, articles - 1
              C++博客 :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

            解析swf文件頭,獲取flash的原始尺寸

            Posted on 2012-02-24 10:21 S.l.e!ep.¢% 閱讀(1351) 評論(0)  編輯 收藏 引用 所屬分類: Flash
            解析swf文件頭,獲取flash的原始尺寸
            想要實現(xiàn)用PHP來得到swf文件幀數(shù)的功能,一些網(wǎng)友回復(fù)說不可能,其實是他們對swf文件格式不了解,swf文件格式規(guī)范是開放的,而 且也可以找到相當(dāng)多的關(guān)于直接用PHP處理swf文件的,包括解析文件頭,生成swf文件等。利用閑暇時間,我也寫了一個粗陋的解析swf文件的類。
            要想解析swf文件頭,首先要弄清楚的當(dāng)然是swf文件格式規(guī)范。規(guī)范中對swf文件格式作了詳細(xì)的說明。關(guān)于swf文件頭,它是由以下幾個部分組成:
            +-------+---+--------+--------+---+----+
            |文件標(biāo)識|版本|文件大小|RECT字段|幀頻|幀數(shù)|
            +-------+---+--------+--------+---+----+
            其中“文件標(biāo)識”為3個字節(jié),包括文件壓縮標(biāo)志。這3個字節(jié)的內(nèi)容為“FWS”或“CWS”,以‘C’開頭的表示swf文件是采用的壓縮輸出(從RECT字段開始至文件結(jié)尾,采用Zlib標(biāo)準(zhǔn)進行文件壓縮)。
            “版本”為一個字節(jié),存儲8位字長的無符號整數(shù),將swf文件的導(dǎo)出版本以16進制方式存儲在該字節(jié),如導(dǎo)出版本為7,則該字節(jié)存儲值為0x07,而不是‘7’對應(yīng)的ASCII值(0x37)。
            “文件大小”存儲占用4個字節(jié),為32位無符號整數(shù),將未壓縮的swf文件大小以16進制形式存入該4個字段,值得注意的是,swf文件存儲是按照 little-endian,即低字節(jié)在前的“小尾”方式存儲的,解析時,需要注意字節(jié)序。如一個swf文件大小為471字節(jié),則該4個字節(jié),由低位到高 位,存儲的內(nèi)容將是0xd7,0x01,0x00,0x00。
            “幀頻”占用兩個字節(jié),表示每秒播放的幀數(shù),存儲方式是8.8共16位的定點數(shù),整數(shù)部分在高位(即第二個字節(jié)),小數(shù)部分在低位(第一個字節(jié)),并按字 節(jié)對齊。如小數(shù)7.5表示為16進制是0x07.80,按照低位在前,高位在后表示,這16位將存儲為如下的2進制代碼10000000 00000111。
            “幀數(shù)”占用兩個字節(jié),為16位無符號整數(shù),表示swf文件的總幀數(shù)。存儲方式類似于“文件大小”存儲方式。
            難理解的是RECT字段,該字段采用swf文件格式規(guī)范中定義的“位值”(bit_value)進行存儲的,這種存儲特征是可以節(jié)約字節(jié)數(shù),但數(shù)值是跨字 節(jié)的。該段存儲內(nèi)容是用‘twip’(翻譯為‘緹’,1pixel = 20twips)單位表示的播放窗口的尺寸。分為Nbits,表示后面字段的bit_value位長;Xmin,Xmax,Ymin,Ymax分別表示 X,Y軸方向上的最小和最大值。
            先說一下bit_value,其特點是不管字節(jié)區(qū)分,按照最小位數(shù)(bits)將值連續(xù)存儲,在末字節(jié)中空位補0,比如兩個9位表示的無符號值7,8將占用3個字節(jié),表示為2進制就是:
            00000011 10000010 00000000
            將3個字節(jié)按位連在一起,前9位值為7,再9位值為8,在第3個字節(jié)的其他空位全部補0。簡單了解了bit_value表示方式,再說RECT結(jié)構(gòu),該字 段前5位(bit)為Nbits字段,表示后面字段的bit_value位長,是一個無符號數(shù),也就是說最大值為為31,如此一來,整個RECT字段的最 大長度為17個字節(jié),也就是說swf文件頭最大不超過29個字節(jié)。通過Nbits字段得到后面字段的bit_value位長后,就可以確定RECT的具體 長度,繼而得知“幀頻”和“幀數(shù)”的存儲位置。在RECT字段中,從第6位開始,存儲的是播放窗口的尺寸數(shù)據(jù),根據(jù)Nbits值,將后面的部分按位分開計 算,即可得到相應(yīng)值。但對文件標(biāo)識為“CWS”的swf文件,從“文件大小”字段后面開始(即從第8個字節(jié)后面開始),是按照Zlib標(biāo)準(zhǔn)壓縮存儲的,所 以,在解析swf文件頭時,首先需判斷swf文件是否按照壓縮格式導(dǎo)出的。如果是以壓縮格式導(dǎo)出的,則需先對頭8個字節(jié)后面的內(nèi)容進行解壓縮處理了,再來 處理RECT字段和“幀頻”和“幀數(shù)”字段。
            亚洲AV无码久久精品蜜桃| 久久国产劲爆AV内射—百度| 久久九九全国免费| 国产AV影片久久久久久| 蜜臀久久99精品久久久久久| 亚洲精品蜜桃久久久久久| 亚洲国产精品久久久久网站| 日韩欧美亚洲综合久久影院Ds | 亚洲婷婷国产精品电影人久久| 午夜精品久久影院蜜桃| 潮喷大喷水系列无码久久精品| 九九久久精品国产| 亚洲第一极品精品无码久久| 国产精品99久久不卡| 色综合久久无码中文字幕| 久久久综合香蕉尹人综合网| 97久久天天综合色天天综合色hd| 欧美午夜A∨大片久久 | 久久久久久人妻无码| 日韩一区二区久久久久久 | 欧美激情精品久久久久久久九九九| 欧美日韩精品久久久免费观看| 丁香五月综合久久激情| 久久受www免费人成_看片中文| 99国产精品久久久久久久成人热| 久久一区二区三区免费| 国产成人AV综合久久| 久久97精品久久久久久久不卡| 国产精品成人久久久| 久久久中文字幕日本| 国产免费久久精品99久久| 久久午夜羞羞影院免费观看| 久久久久亚洲AV无码专区首JN | 伊人久久大香线蕉综合Av| 性做久久久久久久久老女人| 精品久久久无码中文字幕天天| 国产午夜精品久久久久九九| 国产精品成人无码久久久久久 | 国产精品免费福利久久| 亚洲国产精品无码久久久不卡 | 欧美丰满熟妇BBB久久久|