Team Ai
Datasetpublic

codekingpro/portable-devtools

sourceHugging Faceupdated 5mo agoView on Hugging Face
1likes14kdownloads
png.py528 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 Enum6import zlib7 8 9if getattr(kaitaistruct, 'API_VERSION', (0, 9)) < (0, 9):10    raise Exception("Incompatible Kaitai Struct Python API: 0.9 or later is required, but you have %s" % (kaitaistruct.__version__))11 12class Png(KaitaiStruct):13    """Test files for APNG can be found at the following locations:14    15      * <https://philip.html5.org/tests/apng/tests.html>16      * <http://littlesvr.ca/apng/>17    """18 19    class PhysUnit(Enum):20        unknown = 021        meter = 122 23    class BlendOpValues(Enum):24        source = 025        over = 126 27    class CompressionMethods(Enum):28        zlib = 029 30    class DisposeOpValues(Enum):31        none = 032        background = 133        previous = 234 35    class ColorType(Enum):36        greyscale = 037        truecolor = 238        indexed = 339        greyscale_alpha = 440        truecolor_alpha = 641    def __init__(self, _io, _parent=None, _root=None):42        self._io = _io43        self._parent = _parent44        self._root = _root if _root else self45        self._read()46 47    def _read(self):48        self.magic = self._io.read_bytes(8)49        if not self.magic == b"\x89\x50\x4E\x47\x0D\x0A\x1A\x0A":50            raise kaitaistruct.ValidationNotEqualError(b"\x89\x50\x4E\x47\x0D\x0A\x1A\x0A", self.magic, self._io, u"/seq/0")51        self.ihdr_len = self._io.read_u4be()52        if not self.ihdr_len == 13:53            raise kaitaistruct.ValidationNotEqualError(13, self.ihdr_len, self._io, u"/seq/1")54        self.ihdr_type = self._io.read_bytes(4)55        if not self.ihdr_type == b"\x49\x48\x44\x52":56            raise kaitaistruct.ValidationNotEqualError(b"\x49\x48\x44\x52", self.ihdr_type, self._io, u"/seq/2")57        self.ihdr = Png.IhdrChunk(self._io, self, self._root)58        self.ihdr_crc = self._io.read_bytes(4)59        self.chunks = []60        i = 061        while True:62            _ = Png.Chunk(self._io, self, self._root)63            self.chunks.append(_)64            if  ((_.type == u"IEND") or (self._io.is_eof())) :65                break66            i += 167 68    class Rgb(KaitaiStruct):69        def __init__(self, _io, _parent=None, _root=None):70            self._io = _io71            self._parent = _parent72            self._root = _root if _root else self73            self._read()74 75        def _read(self):76            self.r = self._io.read_u1()77            self.g = self._io.read_u1()78            self.b = self._io.read_u1()79 80 81    class Chunk(KaitaiStruct):82        def __init__(self, _io, _parent=None, _root=None):83            self._io = _io84            self._parent = _parent85            self._root = _root if _root else self86            self._read()87 88        def _read(self):89            self.len = self._io.read_u4be()90            self.type = (self._io.read_bytes(4)).decode(u"UTF-8")91            _on = self.type92            if _on == u"iTXt":93                self._raw_body = self._io.read_bytes(self.len)94                _io__raw_body = KaitaiStream(BytesIO(self._raw_body))95                self.body = Png.InternationalTextChunk(_io__raw_body, self, self._root)96            elif _on == u"gAMA":97                self._raw_body = self._io.read_bytes(self.len)98                _io__raw_body = KaitaiStream(BytesIO(self._raw_body))99                self.body = Png.GamaChunk(_io__raw_body, self, self._root)100            elif _on == u"tIME":101                self._raw_body = self._io.read_bytes(self.len)102                _io__raw_body = KaitaiStream(BytesIO(self._raw_body))103                self.body = Png.TimeChunk(_io__raw_body, self, self._root)104            elif _on == u"PLTE":105                self._raw_body = self._io.read_bytes(self.len)106                _io__raw_body = KaitaiStream(BytesIO(self._raw_body))107                self.body = Png.PlteChunk(_io__raw_body, self, self._root)108            elif _on == u"bKGD":109                self._raw_body = self._io.read_bytes(self.len)110                _io__raw_body = KaitaiStream(BytesIO(self._raw_body))111                self.body = Png.BkgdChunk(_io__raw_body, self, self._root)112            elif _on == u"pHYs":113                self._raw_body = self._io.read_bytes(self.len)114                _io__raw_body = KaitaiStream(BytesIO(self._raw_body))115                self.body = Png.PhysChunk(_io__raw_body, self, self._root)116            elif _on == u"fdAT":117                self._raw_body = self._io.read_bytes(self.len)118                _io__raw_body = KaitaiStream(BytesIO(self._raw_body))119                self.body = Png.FrameDataChunk(_io__raw_body, self, self._root)120            elif _on == u"tEXt":121                self._raw_body = self._io.read_bytes(self.len)122                _io__raw_body = KaitaiStream(BytesIO(self._raw_body))123                self.body = Png.TextChunk(_io__raw_body, self, self._root)124            elif _on == u"cHRM":125                self._raw_body = self._io.read_bytes(self.len)126                _io__raw_body = KaitaiStream(BytesIO(self._raw_body))127                self.body = Png.ChrmChunk(_io__raw_body, self, self._root)128            elif _on == u"acTL":129                self._raw_body = self._io.read_bytes(self.len)130                _io__raw_body = KaitaiStream(BytesIO(self._raw_body))131                self.body = Png.AnimationControlChunk(_io__raw_body, self, self._root)132            elif _on == u"sRGB":133                self._raw_body = self._io.read_bytes(self.len)134                _io__raw_body = KaitaiStream(BytesIO(self._raw_body))135                self.body = Png.SrgbChunk(_io__raw_body, self, self._root)136            elif _on == u"zTXt":137                self._raw_body = self._io.read_bytes(self.len)138                _io__raw_body = KaitaiStream(BytesIO(self._raw_body))139                self.body = Png.CompressedTextChunk(_io__raw_body, self, self._root)140            elif _on == u"fcTL":141                self._raw_body = self._io.read_bytes(self.len)142                _io__raw_body = KaitaiStream(BytesIO(self._raw_body))143                self.body = Png.FrameControlChunk(_io__raw_body, self, self._root)144            else:145                self.body = self._io.read_bytes(self.len)146            self.crc = self._io.read_bytes(4)147 148 149    class BkgdIndexed(KaitaiStruct):150        """Background chunk for images with indexed palette."""151        def __init__(self, _io, _parent=None, _root=None):152            self._io = _io153            self._parent = _parent154            self._root = _root if _root else self155            self._read()156 157        def _read(self):158            self.palette_index = self._io.read_u1()159 160 161    class Point(KaitaiStruct):162        def __init__(self, _io, _parent=None, _root=None):163            self._io = _io164            self._parent = _parent165            self._root = _root if _root else self166            self._read()167 168        def _read(self):169            self.x_int = self._io.read_u4be()170            self.y_int = self._io.read_u4be()171 172        @property173        def x(self):174            if hasattr(self, '_m_x'):175                return self._m_x176 177            self._m_x = (self.x_int / 100000.0)178            return getattr(self, '_m_x', None)179 180        @property181        def y(self):182            if hasattr(self, '_m_y'):183                return self._m_y184 185            self._m_y = (self.y_int / 100000.0)186            return getattr(self, '_m_y', None)187 188 189    class BkgdGreyscale(KaitaiStruct):190        """Background chunk for greyscale images."""191        def __init__(self, _io, _parent=None, _root=None):192            self._io = _io193            self._parent = _parent194            self._root = _root if _root else self195            self._read()196 197        def _read(self):198            self.value = self._io.read_u2be()199 200 201    class ChrmChunk(KaitaiStruct):202        """203        .. seealso::204           Source - https://www.w3.org/TR/PNG/#11cHRM205        """206        def __init__(self, _io, _parent=None, _root=None):207            self._io = _io208            self._parent = _parent209            self._root = _root if _root else self210            self._read()211 212        def _read(self):213            self.white_point = Png.Point(self._io, self, self._root)214            self.red = Png.Point(self._io, self, self._root)215            self.green = Png.Point(self._io, self, self._root)216            self.blue = Png.Point(self._io, self, self._root)217 218 219    class IhdrChunk(KaitaiStruct):220        """221        .. seealso::222           Source - https://www.w3.org/TR/PNG/#11IHDR223        """224        def __init__(self, _io, _parent=None, _root=None):225            self._io = _io226            self._parent = _parent227            self._root = _root if _root else self228            self._read()229 230        def _read(self):231            self.width = self._io.read_u4be()232            self.height = self._io.read_u4be()233            self.bit_depth = self._io.read_u1()234            self.color_type = KaitaiStream.resolve_enum(Png.ColorType, self._io.read_u1())235            self.compression_method = self._io.read_u1()236            self.filter_method = self._io.read_u1()237            self.interlace_method = self._io.read_u1()238 239 240    class PlteChunk(KaitaiStruct):241        """242        .. seealso::243           Source - https://www.w3.org/TR/PNG/#11PLTE244        """245        def __init__(self, _io, _parent=None, _root=None):246            self._io = _io247            self._parent = _parent248            self._root = _root if _root else self249            self._read()250 251        def _read(self):252            self.entries = []253            i = 0254            while not self._io.is_eof():255                self.entries.append(Png.Rgb(self._io, self, self._root))256                i += 1257 258 259 260    class SrgbChunk(KaitaiStruct):261        """262        .. seealso::263           Source - https://www.w3.org/TR/PNG/#11sRGB264        """265 266        class Intent(Enum):267            perceptual = 0268            relative_colorimetric = 1269            saturation = 2270            absolute_colorimetric = 3271        def __init__(self, _io, _parent=None, _root=None):272            self._io = _io273            self._parent = _parent274            self._root = _root if _root else self275            self._read()276 277        def _read(self):278            self.render_intent = KaitaiStream.resolve_enum(Png.SrgbChunk.Intent, self._io.read_u1())279 280 281    class CompressedTextChunk(KaitaiStruct):282        """Compressed text chunk effectively allows to store key-value283        string pairs in PNG container, compressing "value" part (which284        can be quite lengthy) with zlib compression.285        286        .. seealso::287           Source - https://www.w3.org/TR/PNG/#11zTXt288        """289        def __init__(self, _io, _parent=None, _root=None):290            self._io = _io291            self._parent = _parent292            self._root = _root if _root else self293            self._read()294 295        def _read(self):296            self.keyword = (self._io.read_bytes_term(0, False, True, True)).decode(u"UTF-8")297            self.compression_method = KaitaiStream.resolve_enum(Png.CompressionMethods, self._io.read_u1())298            self._raw_text_datastream = self._io.read_bytes_full()299            self.text_datastream = zlib.decompress(self._raw_text_datastream)300 301 302    class FrameDataChunk(KaitaiStruct):303        """304        .. seealso::305           Source - https://wiki.mozilla.org/APNG_Specification#.60fdAT.60:_The_Frame_Data_Chunk306        """307        def __init__(self, _io, _parent=None, _root=None):308            self._io = _io309            self._parent = _parent310            self._root = _root if _root else self311            self._read()312 313        def _read(self):314            self.sequence_number = self._io.read_u4be()315            self.frame_data = self._io.read_bytes_full()316 317 318    class BkgdTruecolor(KaitaiStruct):319        """Background chunk for truecolor images."""320        def __init__(self, _io, _parent=None, _root=None):321            self._io = _io322            self._parent = _parent323            self._root = _root if _root else self324            self._read()325 326        def _read(self):327            self.red = self._io.read_u2be()328            self.green = self._io.read_u2be()329            self.blue = self._io.read_u2be()330 331 332    class GamaChunk(KaitaiStruct):333        """334        .. seealso::335           Source - https://www.w3.org/TR/PNG/#11gAMA336        """337        def __init__(self, _io, _parent=None, _root=None):338            self._io = _io339            self._parent = _parent340            self._root = _root if _root else self341            self._read()342 343        def _read(self):344            self.gamma_int = self._io.read_u4be()345 346        @property347        def gamma_ratio(self):348            if hasattr(self, '_m_gamma_ratio'):349                return self._m_gamma_ratio350 351            self._m_gamma_ratio = (100000.0 / self.gamma_int)352            return getattr(self, '_m_gamma_ratio', None)353 354 355    class BkgdChunk(KaitaiStruct):356        """Background chunk stores default background color to display this357        image against. Contents depend on `color_type` of the image.358        359        .. seealso::360           Source - https://www.w3.org/TR/PNG/#11bKGD361        """362        def __init__(self, _io, _parent=None, _root=None):363            self._io = _io364            self._parent = _parent365            self._root = _root if _root else self366            self._read()367 368        def _read(self):369            _on = self._root.ihdr.color_type370            if _on == Png.ColorType.indexed:371                self.bkgd = Png.BkgdIndexed(self._io, self, self._root)372            elif _on == Png.ColorType.truecolor_alpha:373                self.bkgd = Png.BkgdTruecolor(self._io, self, self._root)374            elif _on == Png.ColorType.greyscale_alpha:375                self.bkgd = Png.BkgdGreyscale(self._io, self, self._root)376            elif _on == Png.ColorType.truecolor:377                self.bkgd = Png.BkgdTruecolor(self._io, self, self._root)378            elif _on == Png.ColorType.greyscale:379                self.bkgd = Png.BkgdGreyscale(self._io, self, self._root)380 381 382    class PhysChunk(KaitaiStruct):383        """"Physical size" chunk stores data that allows to translate384        logical pixels into physical units (meters, etc) and vice-versa.385        386        .. seealso::387           Source - https://www.w3.org/TR/PNG/#11pHYs388        """389        def __init__(self, _io, _parent=None, _root=None):390            self._io = _io391            self._parent = _parent392            self._root = _root if _root else self393            self._read()394 395        def _read(self):396            self.pixels_per_unit_x = self._io.read_u4be()397            self.pixels_per_unit_y = self._io.read_u4be()398            self.unit = KaitaiStream.resolve_enum(Png.PhysUnit, self._io.read_u1())399 400 401    class FrameControlChunk(KaitaiStruct):402        """403        .. seealso::404           Source - https://wiki.mozilla.org/APNG_Specification#.60fcTL.60:_The_Frame_Control_Chunk405        """406        def __init__(self, _io, _parent=None, _root=None):407            self._io = _io408            self._parent = _parent409            self._root = _root if _root else self410            self._read()411 412        def _read(self):413            self.sequence_number = self._io.read_u4be()414            self.width = self._io.read_u4be()415            if not self.width >= 1:416                raise kaitaistruct.ValidationLessThanError(1, self.width, self._io, u"/types/frame_control_chunk/seq/1")417            if not self.width <= self._root.ihdr.width:418                raise kaitaistruct.ValidationGreaterThanError(self._root.ihdr.width, self.width, self._io, u"/types/frame_control_chunk/seq/1")419            self.height = self._io.read_u4be()420            if not self.height >= 1:421                raise kaitaistruct.ValidationLessThanError(1, self.height, self._io, u"/types/frame_control_chunk/seq/2")422            if not self.height <= self._root.ihdr.height:423                raise kaitaistruct.ValidationGreaterThanError(self._root.ihdr.height, self.height, self._io, u"/types/frame_control_chunk/seq/2")424            self.x_offset = self._io.read_u4be()425            if not self.x_offset <= (self._root.ihdr.width - self.width):426                raise kaitaistruct.ValidationGreaterThanError((self._root.ihdr.width - self.width), self.x_offset, self._io, u"/types/frame_control_chunk/seq/3")427            self.y_offset = self._io.read_u4be()428            if not self.y_offset <= (self._root.ihdr.height - self.height):429                raise kaitaistruct.ValidationGreaterThanError((self._root.ihdr.height - self.height), self.y_offset, self._io, u"/types/frame_control_chunk/seq/4")430            self.delay_num = self._io.read_u2be()431            self.delay_den = self._io.read_u2be()432            self.dispose_op = KaitaiStream.resolve_enum(Png.DisposeOpValues, self._io.read_u1())433            self.blend_op = KaitaiStream.resolve_enum(Png.BlendOpValues, self._io.read_u1())434 435        @property436        def delay(self):437            """Time to display this frame, in seconds."""438            if hasattr(self, '_m_delay'):439                return self._m_delay440 441            self._m_delay = (self.delay_num / (100.0 if self.delay_den == 0 else self.delay_den))442            return getattr(self, '_m_delay', None)443 444 445    class InternationalTextChunk(KaitaiStruct):446        """International text chunk effectively allows to store key-value string pairs in447        PNG container. Both "key" (keyword) and "value" (text) parts are448        given in pre-defined subset of iso8859-1 without control449        characters.450        451        .. seealso::452           Source - https://www.w3.org/TR/PNG/#11iTXt453        """454        def __init__(self, _io, _parent=None, _root=None):455            self._io = _io456            self._parent = _parent457            self._root = _root if _root else self458            self._read()459 460        def _read(self):461            self.keyword = (self._io.read_bytes_term(0, False, True, True)).decode(u"UTF-8")462            self.compression_flag = self._io.read_u1()463            self.compression_method = KaitaiStream.resolve_enum(Png.CompressionMethods, self._io.read_u1())464            self.language_tag = (self._io.read_bytes_term(0, False, True, True)).decode(u"ASCII")465            self.translated_keyword = (self._io.read_bytes_term(0, False, True, True)).decode(u"UTF-8")466            self.text = (self._io.read_bytes_full()).decode(u"UTF-8")467 468 469    class TextChunk(KaitaiStruct):470        """Text chunk effectively allows to store key-value string pairs in471        PNG container. Both "key" (keyword) and "value" (text) parts are472        given in pre-defined subset of iso8859-1 without control473        characters.474        475        .. seealso::476           Source - https://www.w3.org/TR/PNG/#11tEXt477        """478        def __init__(self, _io, _parent=None, _root=None):479            self._io = _io480            self._parent = _parent481            self._root = _root if _root else self482            self._read()483 484        def _read(self):485            self.keyword = (self._io.read_bytes_term(0, False, True, True)).decode(u"iso8859-1")486            self.text = (self._io.read_bytes_full()).decode(u"iso8859-1")487 488 489    class AnimationControlChunk(KaitaiStruct):490        """491        .. seealso::492           Source - https://wiki.mozilla.org/APNG_Specification#.60acTL.60:_The_Animation_Control_Chunk493        """494        def __init__(self, _io, _parent=None, _root=None):495            self._io = _io496            self._parent = _parent497            self._root = _root if _root else self498            self._read()499 500        def _read(self):501            self.num_frames = self._io.read_u4be()502            self.num_plays = self._io.read_u4be()503 504 505    class TimeChunk(KaitaiStruct):506        """Time chunk stores time stamp of last modification of this image,507        up to 1 second precision in UTC timezone.508        509        .. seealso::510           Source - https://www.w3.org/TR/PNG/#11tIME511        """512        def __init__(self, _io, _parent=None, _root=None):513            self._io = _io514            self._parent = _parent515            self._root = _root if _root else self516            self._read()517 518        def _read(self):519            self.year = self._io.read_u2be()520            self.month = self._io.read_u1()521            self.day = self._io.read_u1()522            self.hour = self._io.read_u1()523            self.minute = self._io.read_u1()524            self.second = self._io.read_u1()525 526 527 528 
codekingpro/portable-devtools · Team Ai