a :jgI@sddlmZddlZddlmZmZmZddlmZ ddlm Z ddlm Z dd d d d Z Gd ddejZeejee eejddgdS)) annotationsN)Image ImageFile ImagePalette)i16le)i32leo8bytesbool)prefixreturncCs(t|dko&t|ddvo&t|ddvS)N)i)r)leni16)r rGz&FliImageFile._open..ii)r r)rRGBr'css,|]$\}}}t|t|t|VqdSNr )r$rgbrrr dr'z%FliImageFile._open..)fpreadr SyntaxErrorrZn_framesZ is_animated_mode_sizei32inforange_FliImageFile__offsetseekosSEEK_CUR_paletterrawjoinpalette_FliImageFile__frame_fptell_FliImageFile__rewind) selfsmsgr#magicrAZnumber_of_subchunks chunk_size_Z chunk_typerrr_open0sR                 zFliImageFile._openzlist[tuple[int, int, int]]int)rAshiftrc Csd}tt|jdD]}|jd}||d}|d}|dkrHd}|j|d}tdt|dD]F}|||>}||d|>}||d|>} ||| f||<|d7}qhqdS)Nrr*rr(r)r9rr2r3r) rFrArNierGnr-r.r/rrrr>ms   zFliImageFile._palette)framercCsJ||sdS||jkr"|dt|jd|dD]}||q6dS)Nrr)Z _seek_checkrB_seekr9)rFrRfrrrr;s    zFliImageFile.seekcCs|dkr$d|_|j|jd|_n|||jdkrLd|}t|||_|j|_|j|j|jd}|sd}t |t |}||_ t dd |j|jdg|_|j|7_dS) Nrr1rrzcannot seek to frame rzmissing frame sizeZfli)rr)rBrCr;rEr:load ValueErrorr2r3EOFErrorr7ZdecodermaxblockrZ_TilesizeZtile)rFrRrHrGZ framesizerrrrSs&  zFliImageFile._seekcCs|jSr,)rB)rFrrrrDszFliImageFile.tellN) __name__ __module__ __qualname__formatformat_descriptionZ!_close_exclusive_fp_after_loadingrLr>r;rSrDrrrrr+s= rz.fliz.flc) __future__rr<rrr_binaryrrrr7r rrZ register_openr\Zregister_extensionsrrrrs