Пример #1
0
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
Пример #2
0
	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')
Пример #3
0
    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
Пример #4
0
def read_dcu_header(filepath):
    reader = BinaryReader(filepath)
    magic = reader.read_u32()
    print('0x%x' % magic, type(magic))