a :jg! @sddlmZddlZddlmZddlmZddlmZm Z m Z ddl m Z ddl m Zdd l mZdd l mZdd l mZd d d dddd d dd ZdddddZGddde j ZddddddZdd d!dd"d#d$d%Zeejeeeejd&eejd'dS)() annotationsN)cached_property)IO)Image ImageFile ImagePalette)i8)i16be)i32be)si16be)si32be)1r)Lr)Pr)RGB)CMYK)ZLABr) )rr)r)rr)r)rr)rr)r)rr) rbytesbool)prefixreturncCs|dddkS)Nrs8BPS)rrrdataendidnamerrr_open>sh           zPsdImageFile._openGlist[tuple[str, str, tuple[int, int, int, int], list[ImageFile._Tile]]]cCsLg}|jdur>|j|jtt|j|j}t||j}t ||_ |SN) r9r@r;ioBytesIOr _safe_readr: _layerinfor6r<)rBlayersZ _layer_datarrrrRs   zPsdImageFile.layersintcCs|jdurt|j|_|jSrM)r<r6rRrBrrrn_framess  zPsdImageFile.n_framesrcCst|jdkS)Nr)r6rRrTrrr is_animatedszPsdImageFile.is_animated)layerrc Csz||sdSz4|j|d\}}}}||_||_||_|j|_Wn2tyt}zd}t||WYd}~n d}~00dS)Nrz no such layer) Z _seek_checkrRr/r?rAr@r) IndexErrorEOFError)rBrW_rEr?erDrrrr;s  zPsdImageFile.seekcCs|jSrM)rArTrrrr5szPsdImageFile.tellN)__name__ __module__ __qualname__formatformat_descriptionZ!_close_exclusive_fp_after_loadingrKrrRpropertyrUrVr;r5rrrrr 9sS r z IO[bytes]rSrL)r)ct_bytesrc sjg}dddfdd }t|d}|t|dkr@d}t|tt|D]}t|d }t|d }t|d } t|d } g} t|d} | d kr̈| d d tjt |d } | tjqLt| D]8}t|d}|d krd }nd|}| ||d q| | dgkr(d}n,| gdkrrcs t|SrM)rrP)r>r)rrr*sz_layerinfo..readrz4Layer block too short for number of layers requestedrr$iAr&Rr)BGrgr)rfrhrirgrzlatin-1replace)si16absr,rangesi32r+r;rNSEEK_CURr0r7sortr5r decode enumerater=extend)r)rbrRr*ctrDrZZy0Zx0y1x1ZbandsZct_typesr>typebrErJZdata_endlengthZ layerinfoibboxr?mtrrcrrQst                  rQstrztuple[int, int, int, int]zlist[ImageFile._Tile])filerEr}rFrc Cs6g}|j}t|d}|d|d}|d|d}|} |dkrt|D]>} || } |dkrj| d7} |td|| | | ||} qNn|dkrd} |||d} |} t|D]V} || } |dkr| d7} |td|| | t|D]}| t| | } | d7} qq|| | d@r2|d|S) Nrrrrrz;Ir2Zpackbits)r*r+r5ror7rZ_Tiler;)rrEr}rFZtilesr* compressionZxsizeZysizeoffsetZchannelrWr|Z bytecountyrrrr=s:        r=z.psdzimage/vnd.adobe.photoshop) __future__rrN functoolsrtypingrrjrrr_binaryr r r+r r0r rmr rpr-rr rQr=Z register_openr_Zregister_extensionZ register_mimerrrrs6        [2