如何獲取JPG和FLASH文件的維數(寬和高),需詳細的算法或源代碼


如何獲取JPG和FLASH文件的維數(寬和高),需詳細的算法或源代碼,
請在這里貼出可實現的算法或源代碼(C亦可),不要提供連接。

5 个解决方案

#1


分析jpg和swf文件格式

#2


你這不廢話嗎?
就你這種風格怎么會有5個角呀

#3


ft

#4


因為不知道你需要什么語言,所以這里就用python語言
對於jpg文件,可以用pil來得到size
import Image
im = Image.open('1.jpg')
print im.getbbox()

對於flash文件,也許有library來得到size,不過我還沒有找到,就自己分析了一下swf文件的內容,因swf文件版本比較多,而且數據比較復雜,不保證能處理所有的swf文件.

from struct import *
import zlib
import cStringIO

def main(swffilename):
    swffile = open(swffilename, 'rb') 
    header = swffile.read(8)
    sig, v, file_length =  unpack('<3sBl', header)

    print sig, v, file_length
    # assert v == 7
    if sig == 'CWS':                # Compresed
        #content = (zlib.uncompress(swffile.read()))
        content = cStringIO.StringIO(zlib.decompress(swffile.read()))
    else:
        #content = (swffile.read())
        content = cStringIO.StringIO(swffile.read())
    swffile.close()
    
    content.seek(0)  
    #
    bit_len = unpack('<B', content.read(1))
    # assert bit_len == ..

    a,b,c,d,e,f,g = unpack('<BBBBBBB', content.read(7))
    min_x = (a<<6) + (b>>2)
    max_x = ((b>>2)<<12) + (c<<4) + (d>>4) 
    min_y =  ((d>>4)<<10) + (e<<2) + (f>>6)
    max_y = ((f>>2)<<8) + g    
    
    print (max_x - min_x)/20, (max_y - min_y) / 20  
    

if __name__ == '__main__':
    main('test.swf')
    

#5


關於求swf寬和高的,又查了些資料,應該這樣寫

from struct import *
import zlib
import cStringIO
            
def parse_rect(rd_type, s):
    d ={
    0x50: (0, 0, 4, 0, 5, 4 ), 
    0x58: (1, 1, 4, 0, 6, 4 ), 
    0x60: (0, 1, 4, 0, 7, 4 ), 
    0x68: (1, 2, 4, 0, 9, 4 ), 
    0x70: (0, 2, 4, 0, 9, 4 ), 
    0x78: (1, 3, 4, 0, 10, 4 ), 
    0x80: (0, 3, 4, 0, 11, 4 ), 
    0x88: (1, 2, 5, 0, 12, 4 ), 
    }
    st = []
    for b in s:
        st.append(b >> 4)
        st.append(b & 0xf)
    c1, w, ws, c2, h, hs = d[rd_type]
    xw = 0
    for b in st[w: w + ws]:
        xw <<= 4 
        xw += b
    if c1: xw /= 40
    else: xw /= 10
    
    xh = 0
    for b in st[h: h + hs]:
        xh <<= 4 
        xh += b
    if c2: xh /= 40
    else: xh /= 10

    return xw, xh

    


def main(swffilename):
    swffile = open(swffilename, 'rb') 
    header = swffile.read(8)
    sig, v, file_length =  unpack('<3sBl', header)

    if sig == 'CWS':
        content = cStringIO.StringIO(zlib.decompress(swffile.read()))
    else:
        content = cStringIO.StringIO(swffile.read())
    swffile.close()

    content.seek(0)  
    (rd_type, ) = unpack('<B', content.read(1))
    

    s = unpack('<8B', content.read(8))
    w, h =  parse_rect(rd_type, s)
    
    print w, h
    
    

if __name__ == '__main__':
    main('test.swf')

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com