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))
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 # ここからタグが続く
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, }
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)
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)
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, '-')
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
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)
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, }
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()
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))
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))
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))
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
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)
def parse(self): self.character_id = le2byte(self.read(2)) # FontID self.FontName = self.read_string() self.FontCopyright = self.read_string()
def parse(self): self.character_id = le2byte(self.read(2)) # FontID
def parse(self): self.ShapeId = le2byte(self.read(2)) # Shape ID self.ShapeBounds = RECT() self.ShapeBounds.parse(self)
def parse(self): self.depth = le2byte(self.read(2))
def parse(self): self.character_id = le2byte(self.read(2)) self.AlphaDataOffset = le4byte(self.read(4))
def parse(self): self.character_id = le2byte(self.read(2)) self.JPEGData = self.read[self.offset:]