from PIL import Image import numpy as np import struct import io def load(data): def consume(n): nonlocal data out, data = data[:n], data[n:] if len(out) < n: raise ValueError(f'File is truncated, tried to read {n} bytes, but only {len(out)} bytes remain.') return out header = consume(128) if header[:2] not in [ bytes([0xca, 0xac]), bytes([0xba, 0xab]) ] or header[-2:] != bytes([0xac, 0xca]): raise ValueError('Header magic not found.') _unk0, coarse_section_length, y_res, x_res,\ _zero0, _unk1, _zero1, fine_offset, _unk2, jpeg_length,\ y_res_2, x_res_2, _unk3, = struct.unpack('