a :jg{@sddlmZddlZddlmZmZddlmZdddd d d d d Z dddddZ GdddejZ e e j e e ee j ddS)) annotationsN)Image ImageFile)i32le)AL)rr)RGBAZLA)RGBzYCC;P)r zYCCA;P)r r )r r ))i)i)ii)iii)iiii)iii)iiiibytesbool)prefixreturncCs|ddtjkS)N)olefileMAGIC)r r}|d |Bttrt d }d krd }t |t fd dt |D}t |\|_|_i|_t dD]&}d|d >B}||vr|||j|<q|d|jdS)NData Object Store 06dzImage Contentsiir@izInvalid number of bandsc3s$|]}td|dd@VqdS)rr(iN)i32).0isrr nz+FpxImageFile._open_index..i)rZ getproperties isinstancer!_sizemaxsizeZmaxidr r)rtuplerangeMODES_moderawmodejpeg_open_subimage) rr"propr4r+idZbandsrcolorsrr,rrJs2       zFpxImageFile._open_indexr)r"subimagerc Csbd|dd|ddg}|j|}|d|d}t|dt|d f}t|d t|d f}t|d}t|d } ||jkrd } t| |d||t|d| }d} } |\} }|\}}g|_tdt || D]j}t | | |}t || |}t||d }|dkrF|j t d| | ||ft||d|jfn|dkr|j t d| | ||ft||d|j|dd fn|dkr|d}|d}|j}|r|dkrd\}}nd}n|}|j t d| | ||ft||d||f|r|j||_n d} t| | |} | | krd| |} } | |krqJq||_|j|_d|_dS)Nr#r$z Resolution Z04dzSubimage 0000 Header$r(rr' zsubimage mismatch rrawrfillr&r )ZYCbCrKZCMYKr:zunknown/invalid compression)r openstreamreadr)r4rseekZtiler6lenminappendrZ_Tiler9r:Z tile_prefixstreamr_fp)rr"r?rOrr-r4ZtilesizeoffsetlengthrxyZxsizeZysizeZxtileZytiler+x1y1 compressionZinternal_color_conversionZ jpeg_tablesr9Zjpegmoderrrr;{s                    zFpxImageFile._open_subimagezImage.core.PixelAccess | NonecCs0|js$|j|jdddg|_tj|S)Nr&zSubimage 0000 Data)rrrIrOrloadrrrrrXszFpxImageFile.loadcs|jtdSN)rclosesuperrY __class__rrr[s zFpxImageFile.closeobject)argsrcs|jtdSrZ)rr[r\__exit__)rr`r]rrras zFpxImageFile.__exit__)r)rr) __name__ __module__ __qualname__formatformat_descriptionr rr;rXr[ra __classcell__rrr]rr4s1qrz.fpx) __future__rrrr_binaryrr)r7rrZ register_openreZregister_extensionrrrrs  L