コード例 #1
0
ファイル: structure.py プロジェクト: algas/tomato
 def parse(self):
     self.character_id = le2byte(self.read(2))
     self.BitmapFormat = ord(self.read(1))
     self.BitmapWidth = le2byte(self.read(2))
     self.BitmapHeight = le2byte(self.read(2))
     if self.BitmapFormat == 3:
         self.BitmapColorTableSize = ord(self.read(1))
コード例 #2
0
ファイル: structure.py プロジェクト: algas/tomato
    def parse(self):
        self.sprite_id = le2byte(self.read(2))  # Sprite ID

        self.framecount_offset = self.pos
        self.framecount = le2byte(self.read(2))

        self.blocks_offset = self.pos
        self.blocks = parser.SwfBlockParser(
            self.value[self.pos:],
            base_block=self).blocks   # ここからタグが続く        
コード例 #3
0
ファイル: swf_image_dumper.py プロジェクト: algas/tomato
    def parse_lossless(self, v, length):
        "共通部分"
        image_id = le2byte(self.block_read(2))
        format = ord(self.block_read(1))
        width = le2byte(self.block_read(2))
        height = le2byte(self.block_read(2))
        data = self.block_read(length-7)

        self.image_dict[image_id] = {
            'tag': swf_tag_name_entry[self.block['tag']],
            'format': format,
            'width': width,
            'height': height,
            'data': data,
            }
コード例 #4
0
ファイル: structure.py プロジェクト: algas/tomato
 def __init__(self, block):
     StructBlock.__init__(self, block)
     self.width = le2byte(self.read(2))
     if self.block.tag_name in ('DefineShape', 'DefineShape2'):
         self.color = RGB(self.block)
     elif self.block.tag_name == 'DefineShape3':
         self.color = RGBA(self.block)
コード例 #5
0
ファイル: swf_image_dumper.py プロジェクト: algas/tomato
 def parse_swf_head(self):
     "swf_header"
     self.magic = self.swf_read(3)
     self.version = ord(self.swf_read(1))
     self.file_length = le4byte(self.swf_read(4))
     
     "swf_header_movie"
     # twips 関連のヘッダは、今は飛ばす
     rectbits = ord(self.swf_read(1)) >> 3
     total_bytes = int(ceil((5 + rectbits * 4) / 8.0)) 
     twips_waste = self.swf_read(total_bytes - 1)
 
     # frame 関連
     self.frame_rate_decimal = ord(self.swf_read(1))
     self.frame_rate_integer = ord(self.swf_read(1))
     self.frame_count = le2byte(self.swf_read(2))
 
     if DEBUG:
         print "magic: %s\nver: %d\nlen: %d\nframe_rate: %d.%d\ncount: %d\n" % ( \
             self.magic,
             self.version,
             self.file_length,
             self.frame_rate_integer,
             self.frame_rate_decimal,
             self.frame_count)
コード例 #6
0
ファイル: swf_processor.py プロジェクト: algas/tomato
    def parse_swfhead(self):
        "Parse File Header."
        self.magic = self.read(3)
        self.version = ord(self.read(1))
        self.file_length = le4byte(self.read(4))

        # RECT ヘッダ(これは 8 byte 目で固定)
        self.rect = RECT()
        self.rect.parse(self)

        # frame 関連
        self.frame_rate = get_fixed_point_number(self.read(2))
        self.frame_count = le2byte(self.read(2))

        # File Header(head)とその後の部分(tail)を分離する
        self.swf_head = self.value[:self.pos]
        self.swf_tail = self.value[self.pos:]
        
        if DEBUG:
            print " Swf Header ".center(60,'-')
            print "magic: %s\nver: %d\nlen: %d\nframe_rate: %f\ncount: %d" % ( \
                self.magic,
                self.version,
                self.file_length,
                self.frame_rate,
                self.frame_count)
            print " Swf Blocks ".center(60, '-')
コード例 #7
0
ファイル: swf_image_dumper.py プロジェクト: algas/tomato
 def parse_swfblock(self):
     # print "--swf_pos:", self.swf_pos
     swf_block_start = self.swf_pos
     swf_tag = le2byte(self.swf_read(2))
     block_len = swf_tag & 0x3f
     if block_len == 0x3f:
         block_len = le4byte(self.swf_read(4))
     swf_tag = swf_tag >> 6        
     if swf_tag == 0:
         return None
     
     try:
         swf_tag_name = swf_tag_name_entry[swf_tag]
     except KeyError:
         swf_tag_name = "Unknown"
     
     self.block_pos = 0
     ret = {}
     ret['block_start'] = swf_block_start
     ret['tag'] = swf_tag
     ret['block_len'] = block_len
     ret['tag_name'] = swf_tag_name
     ret['value'] = self.parse_swfblock_misc(swf_tag, block_len)
     self.block = ret
     return True
コード例 #8
0
ファイル: structure.py プロジェクト: algas/tomato
 def parse(self):
     self.ShapeId = le2byte(self.read(2))   # Shape ID
     self.rect_offset = self.pos
     self.ShapeBounds = RECT()
     self.ShapeBounds.parse(self)
     self.align_byte()
     self.Shapes = SHAPEWITHSTYLE(self)
コード例 #9
0
ファイル: swf_image_dumper.py プロジェクト: algas/tomato
 def parse_jpeg(self, v, length):
     image_id = le2byte(self.block_read(2))
     data = self.block_read(length-2)
     self.image_dict[image_id] = {
         'tag': swf_tag_name_entry[self.block['tag']],
         'format': -1,
         'data': data,
         }
コード例 #10
0
ファイル: structure.py プロジェクト: algas/tomato
    def __init__(self, *args):
        SwfBlock.__init__(self, *args)

        if self.IS_PARSE:
            # Definition Tag には最初2バイトに必ずユニークな character_id が存在している
            self.character_id_offset = self.pos
            self.character_id = le2byte(self.value[self.pos:(self.pos + 2)])

            # ハッシュの生成
            self.generate_hash()
コード例 #11
0
ファイル: structure.py プロジェクト: algas/tomato
    def __init__(self, block):
        StructBlock.__init__(self, block)

        self.FillStyleCount = ord(self.read(1))
        if self.FillStyleCount == '\xff':
            self.FillStyleCountExtended = le2byte(self.read(2))

        self.FillStyles = []
        for i in range(self.FillStyleCount):
            self.FillStyles.append(FILLSTYLE(self.block))
コード例 #12
0
ファイル: structure.py プロジェクト: algas/tomato
    def __init__(self, block):
        StructBlock.__init__(self, block)
        self.LineStyleCount = ord(self.read(1))
        if self.LineStyleCount == ord('\xff'):
            self.LineStyleCountExtended = le2byte(self.read(2))

        self.LineStyles = []
        if self.block.tag_name in ('DefineShape', 'DefineShape2', 'DefineShape3'):
            for i in range(self.LineStyleCount):
                self.LineStyles.append(LINESTYLE(self.block))
コード例 #13
0
ファイル: structure.py プロジェクト: algas/tomato
    def parse(self):
        # See: http://www.m2osw.com/swf_tag_placeobject2
        # Flash Lite 1.1 (Flash Version 4) を想定したコード

        self.f_place_reserved, \
        self.f_place_has_clipping_depth, \
        self.f_place_has_name, \
        self.f_place_has_ratio, \
        self.f_place_has_color_transform, \
        self.f_place_has_matrix, \
        self.f_place_has_character, \
        self.f_place_has_move = self.read_bits(8)

        self.depth_offset = self.pos
        self.depth = le2byte(self.read(2))

        if self.f_place_has_character:
            self.target_character_id_offset = self.pos
            self.target_character_id = le2byte(self.read(2))
        else:
            self.target_character_id = None
        
        if self.f_place_has_matrix:
            self.matrix_offset = self.pos
            self.matrix = MATRIX()
            self.matrix.parse(self)
            self.align_byte()

        if self.f_place_has_color_transform:
            self.color_transform = CXFORMWITHALPHA()
            self.color_transform.parse(self)

        if self.f_place_has_ratio:
            f_ratio = le2byte(self.read(2))

        if self.f_place_has_name:
            self.name_offset = self.pos
            self.name = self.read_string()

        if self.f_place_has_clipping_depth:
            if DEBUG: print "\tClip Depth:", le2byte(self.read(2))
コード例 #14
0
ファイル: structure.py プロジェクト: algas/tomato
    def set_length(self, num):
        """
        タグ(block)の length を変える. length の長さによって形式が変わる
        See swf_file_format_spec_v10.pdf (p.27)
        """
        old_tag_code_and_length = le2byte(self.value[:2])
        length = old_tag_code_and_length & 0x3f

        if length != 63:
            """
            short. TagCodeAndLength は 2 byte のみ
            """
            tag_code_and_length = (self.tag << 6) + num
            self.value = _h16(tag_code_and_length) + self.value[2:]
        else:
            """
            large. TagCodeAndLength は 2 byte + 4 byte
            後ろの 4 byte の length を変えれば良い
            """
            self.value = self.value[:(self.content_offset - 4)] + _h32(num) + \
                self.value[self.content_offset:]
        self.length = num
コード例 #15
0
ファイル: structure.py プロジェクト: algas/tomato
    def __init__(self, block):
        StructBlock.__init__(self, block)
        
        self.FillStyleType = self.read(1)
        
        if self.FillStyleType == '\x00':
            if self.block.tag_name in ('DefineShape', 'DefineShape2'):
                self.color = RGB(self.block)
            elif self.block.tag_name == 'DefineShape3':
                self.color = RGBA(self.block)

        if self.FillStyleType in ('\x10', '\x12', '\x13'):
            self.GradientMatrix = MATRIX()
            self.GradientMatrix.parse(self.block)
        
        if self.FillStyleType in ('\x10', '\x12'):
            self.Gradient = GRADIENT(self.block)
        # elif self.FillStyleTYPE == '\x13':  # SWF 8 or later
        #     self.Gradient = FOCALGRADIENT(self.block)

        if self.FillStyleType in ('\x40', '\x41', '\x42', '\x43'):
            self.BitmapId = le2byte(self.read(2))
            self.BitmapMatrix = MATRIX()
            self.BitmapMatrix.parse(self.block)
コード例 #16
0
ファイル: structure.py プロジェクト: algas/tomato
 def parse(self):
     self.character_id = le2byte(self.read(2))  # FontID
     self.FontName = self.read_string()
     self.FontCopyright = self.read_string()
コード例 #17
0
ファイル: structure.py プロジェクト: algas/tomato
 def parse(self):
     self.character_id = le2byte(self.read(2))  # FontID
コード例 #18
0
ファイル: structure.py プロジェクト: algas/tomato
 def parse(self):
     self.ShapeId = le2byte(self.read(2))    # Shape ID
     self.ShapeBounds = RECT()
     self.ShapeBounds.parse(self)
コード例 #19
0
ファイル: structure.py プロジェクト: algas/tomato
 def parse(self):
     self.depth = le2byte(self.read(2))
コード例 #20
0
ファイル: structure.py プロジェクト: algas/tomato
 def parse(self):
     self.character_id = le2byte(self.read(2))
     self.AlphaDataOffset = le4byte(self.read(4))
コード例 #21
0
ファイル: structure.py プロジェクト: algas/tomato
 def parse(self):
     self.character_id = le2byte(self.read(2))
     self.JPEGData = self.read[self.offset:]