class Tiff(object): BYTEORDER={ '<': 'little-endian', '>': 'big-endian' } def __init__(self, fp): self.fp=fp self.byteorder=None self.magic=None self.offset=None self.br=None self.directory=TiffRootDirectory() self.readHeader() # sets self.offset self.readIFDs(self.offset) def readHeader(self): last=None for byte in self.fp.read(2): if last != None and byte != last: raise TiffException('Inconsistent TIFF byte order mark') if ord(byte)==0b1001101: # MM, motorola, or big-endian bo='>' elif ord(byte)==0b1001001: # II, intel, or little-endian bo='<' else: raise TiffException('Unknown byte order in file') self.byteorder=self.BYTEORDER[bo] last=byte self.br=BinaryReader(self.fp, bo) self.magic=self.br.read() if int(self.magic) != 42: raise TiffException('Invalid magic number') self.offset=self.br.read(4, 'I') def readIFDs(self, start): done=False while not done: td=TiffDirectory(self.br, start) self.directory.append(td) if not td.next: done=True start=td.next
def readHeader(self): last=None for byte in self.fp.read(2): if last != None and byte != last: raise TiffException('Inconsistent TIFF byte order mark') if ord(byte)==0b1001101: # MM, motorola, or big-endian bo='>' elif ord(byte)==0b1001001: # II, intel, or little-endian bo='<' else: raise TiffException('Unknown byte order in file') self.byteorder=self.BYTEORDER[bo] last=byte self.br=BinaryReader(self.fp, bo) self.magic=self.br.read() if int(self.magic) != 42: raise TiffException('Invalid magic number') self.offset=self.br.read(4, 'I')
def Parse(buffer: io.BytesIO, length: int = 0): if (isinstance(buffer, io.BytesIO) is not True): raise TypeError("Expecting buffer type but {0} given".format( type(buffer))) #Start bytes parsing header = None current_pos = buffer.tell() buffer.seek(0, io.SEEK_END) length_from_pos = buffer.tell() buffer.seek(current_pos, io.SEEK_SET) if (length_from_pos > 0): reader = BinaryReader(buffer) major_value = buffer.Read8Bits() minor_value = buffer.Read8Bits() build_value = buffer.Read16Bits() version = Version(major_value, minor_value, build_value) header = Header(version=version, ) return header
def read_dcu_header(filepath): reader = BinaryReader(filepath) magic = reader.read_u32() print('0x%x' % magic, type(magic))