• <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>

            兔子的技術博客

            兔子

               :: 首頁 :: 聯系 :: 聚合  :: 管理
              202 Posts :: 0 Stories :: 43 Comments :: 0 Trackbacks

            留言簿(10)

            最新評論

            閱讀排行榜

            評論排行榜

            想要實現用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字段和“幀頻”和“幀數”字段。 
            轉自:http://bbs.chinaunix.net/thread-1203803-1-1.html
            posted on 2012-02-23 11:05 會飛的兔子 閱讀(2725) 評論(0)  編輯 收藏 引用 所屬分類: 非C++技術資料
            久久亚洲国产成人影院| 99久久国产综合精品五月天喷水| 精品久久久久久国产| 亚洲国产天堂久久综合| 精品多毛少妇人妻AV免费久久 | 色综合久久中文字幕无码| 久久久久无码中| 999久久久免费国产精品播放| 国产精品99久久免费观看| 久久亚洲美女精品国产精品| 日本强好片久久久久久AAA| 亚洲AV日韩AV永久无码久久| 无码精品久久久天天影视| 一本色道久久88—综合亚洲精品| 一本一本久久A久久综合精品| 国产A三级久久精品| 久久久精品国产sm调教网站| 国产成年无码久久久久毛片| 午夜不卡888久久| 精品久久久久久国产三级| 久久久久亚洲AV无码去区首| 中文国产成人精品久久亚洲精品AⅤ无码精品 | 久久国产精品二国产精品| 国产精品美女久久久久AV福利| 老司机午夜网站国内精品久久久久久久久| 久久久久人妻一区精品| 2021国产精品久久精品| 亚洲AV无码久久寂寞少妇| 91久久精一区二区三区大全| 国产精品熟女福利久久AV| 久久成人小视频| 精品国产一区二区三区久久| 久久久亚洲精品蜜桃臀| 精品国产乱码久久久久久呢| 99久久久国产精品免费无卡顿| 国产成人精品久久综合| 狠狠色丁香久久婷婷综合_中| 久久久无码一区二区三区| 九九久久精品国产| 久久夜色精品国产噜噜噜亚洲AV| 久久九九亚洲精品|