)Ej1 ddlmZddlZddlZddlZddlZddlmZddlm Z m Z m Z m Z e j dZerddlmZdZd Zd3dZd4dZd4dZd4dZd4dZGddZGdde j Zd5d"Zd6d&Ze jejeee jejd'e jejee jejd(e d)kr e!ej"d*kre#d+ej$e%ej"dd,5Z&ee&Z'e'j(d-D].Z)e)x\Z*Z+Z,e'_)e'-d.e*d/e+d/e,d0/e j%ej"d5Z.e.-d1dddn #1swxYwYej/d2krej0d1ddddS#1swxYwYdSdS)7) annotationsN)IO)Image ImageFilePngImagePluginfeaturesjpg_2000)Jpeg2KImagePluginsicnsfobj IO[bytes]returntuple[bytes, int]c\tjd|tS)Nz>4sI)structunpackread HEADERSIZE)r s EC:\PYTHON\MyICR_Suite\python\Lib\site-packages\PIL/IcnsImagePlugin.py nextheaderr%s =:!6!6 7 77 start_lengthtuple[int, int]sizetuple[int, int, int]dict[str, Image.Image]c|\}}|||d}|dkrd}t|t||dz|dz f|S)Nsz'Unknown signature, expecting 0x00000000)seekr SyntaxErrorread_32)r rrstartlengthsigmsgs rread_32tr')sl!ME6IIe ))A,,C !!!7# 4%!)VaZ0$ 7 77rc |\}}|||d|dz|d|dzf}|d|dz}||dzkr1||}tjd||dddd}nAtjd|d}t dD]} g} |} | dkr|d} | sn| d} | dzr4| d z }|d} | | g|zn-| dz}| ||| |z} | dkrn| dk| dkr"d t| d }t|tjd |d | dd dd}|j |j | d|iS)zn Read a 32bit RGB icon resource. Seems to be either uncompressed or an RLE packbits-like scheme. rrRGBrawN}zError reading channel [z left]Lr) r rr frombuffernewrangeextendappendreprr!joinimputband)r rrr#r$ pixel_sizesizesqindatar7band_ixdata bytesleftbytebyte_int blocksizer&bands rr"r"6s!ME6IIeq'DG#T!WtAw%67J ]Z] *F !6""  eZq! L LYuj$ / /Qxx , ,GDIa--yy||7d?6 (3I99Q<>a--A~~GYGGG!#&&&#CSXXd^^UCQRTUVVD EMM$'7 + + + + 2;rc |d}|||d|dz|d|dzf}|d|dz}tjd|||dddd}d|iS)Nrr)rr/r,A)r rr0r)r rrr#r9r:rBs rread_mkrEbs OEIIeq'DG#T!WtAw%67J ]Z] *F  CTYYv->->sAq Q QD ;rc|\}}|||d}|drF||tj|}t j|jd|iS|ds|dkrtsd}t|||||}tj |} tj | }t j|j|jdkr|d}d|iSd}t|)N sPNG  RGBA)sOQs s jP zQUnsupported icon subimage format (rebuild PIL with JPEG 2000 support to fix this)z Unsupported icon subimage format)r r startswithr PngImageFiler_decompression_bomb_checkr enable_jpeg2k ValueErrorioBytesIOr Jpeg2KImageFilemodeconvert) r rrr#r$r%r7r& jp2kstreamfs rread_png_or_jpeg2000rUnsS!ME6IIe ))B--C ~~011 %  ( . . '000| ABB 9 9 9 "6 S// ! %YYv&& Jz " "  .q 1 1 '000 7f  F##B|0oorceZdZdefgdefgdefgdefgdefgdefdefdefgd efgd efgd efd efgd efdefdefgdefgdefdefdefgd Zd%dZd&dZ d'dZ d(d Z d)d*d$Z d!S)+IcnsFileic10ic09ic14ic08ic13ic07sit32st8mksicp6ic12sih32sh8mksicp5sil32sl8mkic11sicp4sis32ss8mk) )r`r))r`r`r)rar))rarar)r-r-r))r-r-r)@rbr) rcr))0rdr)rcrcr)rer))rererr rrNoneci|_||_t|\}}t|sd}t |t }||krvt|\}}|dkrd}t ||t z }|t z}||f|j|<||tj||z }||ktdSdS)z@ fobj is a file-like object as an icns resource znot an icns filerzinvalid block headerN) dctr r_acceptr!rr rNSEEK_CUR)selfr r%filesizer&irAs r__init__zIcnsFile.__init__s  "4(( Xs|| #$Cc"" " (ll'--NCA~~,!#&&& OA  #I NDHSM IIi - - - NA(llllllrlist[tuple[int, int, int]]cg}|jD]-\}}|D]%\}}||jvr||n&.|SN)SIZESitemsrhr4)rksizesrfmtsfmtreaders r itersizeszIcnsFile.itersizessj***,,  JD$#   V$(??LL&&&E# rrcn|}|sd}t|t|S)NzNo 32bit icon resources found)rxr!max)rkrtr&s rbestsizezIcnsFile.bestsizes8   #1Cc"" "5zzrrrci}|j|D]F\}}|j|}|%|||j||G|S)z Get an icon resource as {channel: array}. Note that the arrays are bottom-up like windows bitmaps and will likely need to be flipped or transposed in some way. )rrrhgetupdater )rkrrhcoderwdescs r dataforsizezIcnsFile.dataforsizesd  Jt, : :LD&8<<%%D 66$)T488999 rN-tuple[int, int] | tuple[int, int, int] | None Image.Imagecf||}n$t|dkr|d|ddf}||}|d}|r|S|d} ||dn#t $rYnwxYw|S)Nr)rrrHr+rD)r{lenrr}copyputalphaKeyError)rkrchannelsr7s rgetimagezIcnsFile.getimages <==??DD YY!^^GT!Wa(D##D)) \\& ! !  I e_ ! ! # #  KK & & & &    D  sB!! B.-B.)r rrrf)rro)rr)rrrrrq)rrrr) __name__ __module__ __qualname__rUr'rEr"rrrnrxr{rrrrrWrWs` "678 "678 "678 "678 "678 * + h  g   456 456(7G*<= * + g  g   456 * + g  g  )  E6.    EIrrWcfeZdZdZdZdZddZeddZej dd ZdddZ d S) IcnsImageFilea! PIL image support for Mac OS .icns files. Chooses the best resolution, but will possibly load a different size image if you mutate the size attribute before calling 'load'. The info dictionary has a key 'sizes' that is a list of sizes that the icns file has. ICNSzMac OS icns resourcerrfcL|jJt|j|_d|_|j|jd<|j|_|jd|jdz|jd|jdzf|_dS)NrHrtrr)r) fprWicns_moderxinfor{ best_sizerrks r_openzIcnsImageFile._open sw"""TW%%  !Y0022 '++-- N1 q 1 1 N1 q 1 1  rrc|jSrq)_sizers rrzIcnsImageFile.sizes zrvaluec|jdD]T}|d|dz|d|dzf}|d|dz}|d|dz |kr ||_dSUd}t|)Nrtrr)rz2This is not one of the allowed sizes of this image)rrrM)rkrr simple_sizescaler&s rrzIcnsImageFile.sizesIg&  Dq'DG+T!WtAw->>KNeAh.E1~a(E11" 2CoorNr int | NoneImage.core.PixelAccess | Nonec|+|jdd\}}||z||zf|_|||f|_tj|}|j|jj|jkr|S||j|j}|}|j|_|j |_ |j|_|S)Nr)) rrrload_imr7 load_preparerrrQr)rkrwidthheightpxr7s rrzIcnsImageFile.load&s   IbqbMME6 v~5DI"FE1DN [  d # # 8 DGLDI$=$=I  Y   / /WWYY%W G  r)rrf)rr)rrrrfrq)rrrr) rrr__doc__formatformat_descriptionrpropertyrsetterrrrrrrsF/     X [   [ rrr7rrfilename str | bytesrfc t|dr|ddddddddd}d |jd gD}i}t |D]e}||vr||n|||f}tj}| |d | ||<fg} | D]:\} }||} | | tt| z| f;|t t} | td t| zzz } | t#d | Dz } |t%jd| |d|t%jdtt| tzz| D]K} || d|t%jd| dL| D]f} || d|t%jd| d|| dgt|dr|dSdS)za Saves the image as a series of PNG files, that are then combined into a .icns file. flushr-rar`ircrb)r]r[rYrXr_r^r\rZci|] }|j| Sr)r).0r7s r z_save..PsVVVrxVVVr append_imagespngr c3&K|] }|dV dS)rNr)rentrys r z_save..fs&55EuQx555555rz>isTOC rrr)N)hasattrr encoderinfor}setvaluesresizerNrOsavegetvaluersr4rrwriteMAGICsumrpack)r7rrrtprovided_images size_streamsrimagetempentriestypestream file_lengthrs r_saver>s r7    EWVbn.@.@RT.U.UVVVOLELLNN## - -&& D ! !D$<((  z|| 4!]]__ TGkkmmAA dd#j3v;;6?@@@@HHUOOOK:CLL 000K355W555555KHHV[{ + +,,,HHWHHV[zCLL:,EE F FGGG.. q T58,,---- q T58,,--- qr7  rprefixbytesboolc6|tSrq)rIr)rs rririzs   U # ##rz.icnsz image/icns__main__r)z)Syntax: python3 IcnsImagePlugin.py [file]rbrtzout--z.pngzout.pngwindows)r rrr)r rrrrrrr)r7rrrrrrrf)rrrr)1 __future__rrNosrsystypingrrrrr check_codecrLr rrrr'r"rErUrWrrri register_openrregister_extension register_save register_mimerrargvprintexitopenrimfrrrrrrr7platform startfilerrrrs&#""""" 888888888888$$Z00 $######  8888 8 8 8 8))))X    """"JbbbbbbbbR?????I'???D9999x$$$$M(-AAA-w777M(%000M(,777 z s38}}q 9::: chqk4 $BmBHW% : :D.2 2 E6538 HH8E88F88U888 9 9 9 9 UZ $ $  GGI                   <9 $ $ BL # # #$$$$$$$$$$$$$$$$$$ s7&A#G F+ G+F/ /G2F/ 3GG"%G"