admin / Synapse-Cortex
publicSelf Hosted ITSM Tool with RBAC/Tenanting and MFA
Synapse-Cortex / Synapse-Cortexv2 / .venv / Lib / site-packages / PIL / McIdasImagePlugin.py
1955 B · main
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 | # # The Python Imaging Library. # $Id$ # # Basic McIdas support for PIL # # History: # 1997-05-05 fl Created (8-bit images only) # 2009-03-08 fl Added 16/32-bit support. # # Thanks to Richard Jones and Craig Swank for specs and samples. # # Copyright (c) Secret Labs AB 1997. # Copyright (c) Fredrik Lundh 1997. # # See the README file for information on usage and redistribution. # from __future__ import annotations import struct from . import Image, ImageFile def _accept(prefix: bytes) -> bool: return prefix.startswith(b"\x00\x00\x00\x00\x00\x00\x00\x04") ## # Image plugin for McIdas area images. class McIdasImageFile(ImageFile.ImageFile): format = "MCIDAS" format_description = "McIdas area file" def _open(self) -> None: # parse area file directory assert self.fp is not None s = self.fp.read(256) if not _accept(s) or len(s) != 256: msg = "not an McIdas area file" raise SyntaxError(msg) self.area_descriptor_raw = s self.area_descriptor = w = [0, *struct.unpack("!64i", s)] # get mode if w[11] == 1: mode = rawmode = "L" elif w[11] == 2: mode = rawmode = "I;16B" elif w[11] == 4: # FIXME: add memory map support mode = "I" rawmode = "I;32B" else: msg = "unsupported McIdas format" raise SyntaxError(msg) self._mode = mode self._size = w[10], w[9] offset = w[34] + w[15] stride = w[15] + w[10] * w[11] * w[14] self.tile = [ ImageFile._Tile("raw", (0, 0) + self.size, offset, (rawmode, stride, 1)) ] # -------------------------------------------------------------------- # registry Image.register_open(McIdasImageFile.format, McIdasImageFile, _accept) # no default extension |