Team Ai
Datasetpublic

codekingpro/portable-devtools

sourceHugging Faceupdated 5mo agoView on Hugging Face
1likes14kdownloads
jpeg.py259 linesDownload Raw Back to kaitaistruct
1# This is a generated file! Please edit source .ksy file and use kaitai-struct-compiler to rebuild2 3import kaitaistruct4from kaitaistruct import KaitaiStruct, KaitaiStream, BytesIO5from enum import Enum6 7 8if getattr(kaitaistruct, 'API_VERSION', (0, 9)) < (0, 9):9    raise Exception("Incompatible Kaitai Struct Python API: 0.9 or later is required, but you have %s" % (kaitaistruct.__version__))10 11from . import exif12class Jpeg(KaitaiStruct):13    """JPEG File Interchange Format, or JFIF, or, more colloquially known14    as just "JPEG" or "JPG", is a popular 2D bitmap image file format,15    offering lossy compression which works reasonably well with16    photographic images.17    18    Format is organized as a container format, serving multiple19    "segments", each starting with a magic and a marker. JFIF standard20    dictates order and mandatory apperance of segments:21    22    * SOI23    * APP0 (with JFIF magic)24    * APP0 (with JFXX magic, optional)25    * everything else26    * SOS27    * JPEG-compressed stream28    * EOI29    """30 31    class ComponentId(Enum):32        y = 133        cb = 234        cr = 335        i = 436        q = 537    def __init__(self, _io, _parent=None, _root=None):38        self._io = _io39        self._parent = _parent40        self._root = _root if _root else self41        self._read()42 43    def _read(self):44        self.segments = []45        i = 046        while not self._io.is_eof():47            self.segments.append(Jpeg.Segment(self._io, self, self._root))48            i += 149 50 51    class Segment(KaitaiStruct):52 53        class MarkerEnum(Enum):54            tem = 155            sof0 = 19256            sof1 = 19357            sof2 = 19458            sof3 = 19559            dht = 19660            sof5 = 19761            sof6 = 19862            sof7 = 19963            soi = 21664            eoi = 21765            sos = 21866            dqt = 21967            dnl = 22068            dri = 22169            dhp = 22270            app0 = 22471            app1 = 22572            app2 = 22673            app3 = 22774            app4 = 22875            app5 = 22976            app6 = 23077            app7 = 23178            app8 = 23279            app9 = 23380            app10 = 23481            app11 = 23582            app12 = 23683            app13 = 23784            app14 = 23885            app15 = 23986            com = 25487        def __init__(self, _io, _parent=None, _root=None):88            self._io = _io89            self._parent = _parent90            self._root = _root if _root else self91            self._read()92 93        def _read(self):94            self.magic = self._io.read_bytes(1)95            if not self.magic == b"\xFF":96                raise kaitaistruct.ValidationNotEqualError(b"\xFF", self.magic, self._io, u"/types/segment/seq/0")97            self.marker = KaitaiStream.resolve_enum(Jpeg.Segment.MarkerEnum, self._io.read_u1())98            if  ((self.marker != Jpeg.Segment.MarkerEnum.soi) and (self.marker != Jpeg.Segment.MarkerEnum.eoi)) :99                self.length = self._io.read_u2be()100 101            if  ((self.marker != Jpeg.Segment.MarkerEnum.soi) and (self.marker != Jpeg.Segment.MarkerEnum.eoi)) :102                _on = self.marker103                if _on == Jpeg.Segment.MarkerEnum.app1:104                    self._raw_data = self._io.read_bytes((self.length - 2))105                    _io__raw_data = KaitaiStream(BytesIO(self._raw_data))106                    self.data = Jpeg.SegmentApp1(_io__raw_data, self, self._root)107                elif _on == Jpeg.Segment.MarkerEnum.app0:108                    self._raw_data = self._io.read_bytes((self.length - 2))109                    _io__raw_data = KaitaiStream(BytesIO(self._raw_data))110                    self.data = Jpeg.SegmentApp0(_io__raw_data, self, self._root)111                elif _on == Jpeg.Segment.MarkerEnum.sof0:112                    self._raw_data = self._io.read_bytes((self.length - 2))113                    _io__raw_data = KaitaiStream(BytesIO(self._raw_data))114                    self.data = Jpeg.SegmentSof0(_io__raw_data, self, self._root)115                elif _on == Jpeg.Segment.MarkerEnum.sos:116                    self._raw_data = self._io.read_bytes((self.length - 2))117                    _io__raw_data = KaitaiStream(BytesIO(self._raw_data))118                    self.data = Jpeg.SegmentSos(_io__raw_data, self, self._root)119                else:120                    self.data = self._io.read_bytes((self.length - 2))121 122            if self.marker == Jpeg.Segment.MarkerEnum.sos:123                self.image_data = self._io.read_bytes_full()124 125 126 127    class SegmentSos(KaitaiStruct):128        def __init__(self, _io, _parent=None, _root=None):129            self._io = _io130            self._parent = _parent131            self._root = _root if _root else self132            self._read()133 134        def _read(self):135            self.num_components = self._io.read_u1()136            self.components = []137            for i in range(self.num_components):138                self.components.append(Jpeg.SegmentSos.Component(self._io, self, self._root))139 140            self.start_spectral_selection = self._io.read_u1()141            self.end_spectral = self._io.read_u1()142            self.appr_bit_pos = self._io.read_u1()143 144        class Component(KaitaiStruct):145            def __init__(self, _io, _parent=None, _root=None):146                self._io = _io147                self._parent = _parent148                self._root = _root if _root else self149                self._read()150 151            def _read(self):152                self.id = KaitaiStream.resolve_enum(Jpeg.ComponentId, self._io.read_u1())153                self.huffman_table = self._io.read_u1()154 155 156 157    class SegmentApp1(KaitaiStruct):158        def __init__(self, _io, _parent=None, _root=None):159            self._io = _io160            self._parent = _parent161            self._root = _root if _root else self162            self._read()163 164        def _read(self):165            self.magic = (self._io.read_bytes_term(0, False, True, True)).decode(u"ASCII")166            _on = self.magic167            if _on == u"Exif":168                self.body = Jpeg.ExifInJpeg(self._io, self, self._root)169 170 171    class SegmentSof0(KaitaiStruct):172        def __init__(self, _io, _parent=None, _root=None):173            self._io = _io174            self._parent = _parent175            self._root = _root if _root else self176            self._read()177 178        def _read(self):179            self.bits_per_sample = self._io.read_u1()180            self.image_height = self._io.read_u2be()181            self.image_width = self._io.read_u2be()182            self.num_components = self._io.read_u1()183            self.components = []184            for i in range(self.num_components):185                self.components.append(Jpeg.SegmentSof0.Component(self._io, self, self._root))186 187 188        class Component(KaitaiStruct):189            def __init__(self, _io, _parent=None, _root=None):190                self._io = _io191                self._parent = _parent192                self._root = _root if _root else self193                self._read()194 195            def _read(self):196                self.id = KaitaiStream.resolve_enum(Jpeg.ComponentId, self._io.read_u1())197                self.sampling_factors = self._io.read_u1()198                self.quantization_table_id = self._io.read_u1()199 200            @property201            def sampling_x(self):202                if hasattr(self, '_m_sampling_x'):203                    return self._m_sampling_x204 205                self._m_sampling_x = ((self.sampling_factors & 240) >> 4)206                return getattr(self, '_m_sampling_x', None)207 208            @property209            def sampling_y(self):210                if hasattr(self, '_m_sampling_y'):211                    return self._m_sampling_y212 213                self._m_sampling_y = (self.sampling_factors & 15)214                return getattr(self, '_m_sampling_y', None)215 216 217 218    class ExifInJpeg(KaitaiStruct):219        def __init__(self, _io, _parent=None, _root=None):220            self._io = _io221            self._parent = _parent222            self._root = _root if _root else self223            self._read()224 225        def _read(self):226            self.extra_zero = self._io.read_bytes(1)227            if not self.extra_zero == b"\x00":228                raise kaitaistruct.ValidationNotEqualError(b"\x00", self.extra_zero, self._io, u"/types/exif_in_jpeg/seq/0")229            self._raw_data = self._io.read_bytes_full()230            _io__raw_data = KaitaiStream(BytesIO(self._raw_data))231            self.data = exif.Exif(_io__raw_data)232 233 234    class SegmentApp0(KaitaiStruct):235 236        class DensityUnit(Enum):237            no_units = 0238            pixels_per_inch = 1239            pixels_per_cm = 2240        def __init__(self, _io, _parent=None, _root=None):241            self._io = _io242            self._parent = _parent243            self._root = _root if _root else self244            self._read()245 246        def _read(self):247            self.magic = (self._io.read_bytes(5)).decode(u"ASCII")248            self.version_major = self._io.read_u1()249            self.version_minor = self._io.read_u1()250            self.density_units = KaitaiStream.resolve_enum(Jpeg.SegmentApp0.DensityUnit, self._io.read_u1())251            self.density_x = self._io.read_u2be()252            self.density_y = self._io.read_u2be()253            self.thumbnail_x = self._io.read_u1()254            self.thumbnail_y = self._io.read_u1()255            self.thumbnail = self._io.read_bytes(((self.thumbnail_x * self.thumbnail_y) * 3))256 257 258 259 
codekingpro/portable-devtools · Team Ai