)Ej%ddlmZddlZddlmZddlmZddlmZm Z m Z m Z dZ e rddlm Z Gd d Zd#dZd$dZd%dZd&d'dZd&d'dZd(d)dZd&d'dZd*d"ZdS)+) annotationsN)Sequence)IO)GimpGradientFileGimpPaletteFile ImageColor PaletteFileF)ImageceZdZdZ d#d$d Zed%d Zejd&d Zed'dZejd(dZd)dZ d*dZ d+dZ e Z d,d-dZ d.d/dZd0d"ZdS)1 ImagePalettea Color palette for palette mapped images :param mode: The mode to use for the palette. See: :ref:`concept-modes`. Defaults to "RGB" :param palette: An optional palette. If given, it must be a bytearray, an array or a list of ints between 0-255. The list must consist of all channels for one color followed by the next color (e.g. RGBRGBRGB). Defaults to an empty palette. RGBNmodestrpalette(Sequence[int] | bytes | bytearray | NonereturnNonecZ||_d|_|p t|_d|_dSN)rrawmode bytearrayrdirty)selfrrs BC:\PYTHON\MyICR_Suite\python\Lib\site-packages\PIL/ImagePalette.py__init__zImagePalette.__init__+s-  #' -)++ !% !Sequence[int] | bytes | bytearrayc|jSr)_paletters rrzImagePalette.palette5s }rc"d|_||_dSr)_colorsr )rrs rrzImagePalette.palette9s:>  rdict[tuple[int, ...], int]c |jwt|j}i|_tdt|j|D]8}t |j|||z}||jvr+||z|j|<9|jS)Nr)r#lenrrangertuple)rmode_lenicolors rcolorszImagePalette.colors>s < 49~~HDL1c$,//:: 4 4dl1q8|+;<==DL((&'8m U##|rr,c||_dSr)r#)rr,s rr,zImagePalette.colorsJs  rct}|j|_|j|_|j|jdd|_|j|_|Sr)r rrrr)rnews rcopyzImagePalette.copyNsDnn9l < #,qqq/CKJ  r-tuple[str, Sequence[int] | bytes | bytearray]cb|jr|j|jfS|j|fS)z Get palette contents in format suitable for the low-level ``im.putpalette`` primitive. .. warning:: This method is experimental. )rrrtobytesr!s rgetdatazImagePalette.getdataYs2 < .<- -y$,,..((rbytesc|jrd}t|t|jtr|jSt jd|j}|S)zUConvert palette to bytes. .. warning:: This method is experimental. !palette contains raw palette dataB)r ValueError isinstancerr5arrayr3)rmsgarrs rr3zImagePalette.tobytesds\ < "5CS// ! dlE * * < k#t|,,{{}}rimageImage.Image | NoneeException | Noneintc&t|jtst|j|_t |jt |jz}d}|rA|jd|jdf}||vr |dz }||v |dkri|rOttt| D]\}}|dkr||vr|}n|dkrd}t|||S)N background transparencyrrz$cannot allocate more than 256 colors) r:rrr r&rinfogetreversedlist enumerate histogramr9)rr>r@indexspecial_colorsr*countr<s r_new_color_indexzImagePalette._new_color_indexts#$, 22 4%dl33DMDL!!S^^3CE   |,, ~..N>)) >)) C<<  (i8I8I.J.J)K)K L LHAuzza~&=&= !||< oo1, rr+tuple[int, ...]cZ|jrd}t|t|tr]|jdkr;t |dkr'|ddkrd}t||dd}n#|jdkrt |dkr|d z } |j|S#t$r}|||}t|j tsJ||j|<t |j}||zt |j kr>|j d||zt|z|j ||z|zdz|_ n|xj t|z c_ d |_ |cYd}~Sd}~wwxYwd t|}t|) zgGiven an rgb tuple, allocate palette entry. .. warning:: This method is experimental. r7rz/cannot add non-opaque RGBA color to RGB paletteNRGBArVrzunknown color specifier: )rr9r:r(rr&r,KeyErrorrQr rrr5rrepr)rr+r>r<r@rNr)s rgetcolorzImagePalette.getcolors < "5CS// ! eU # # "yE!!u::??Qx3O(oo-!"1"IEf$$u::??VOE {5))   --eQ77!$-;;;;;%* E"ty>>8#c$,&7&777 &8(8&89,,'-(88(C(E(EFGMM MMU5\\1MM   "F F fp str | IO[str]c|jrd}t|d}t|trt |d}d} |d|d|jdt|j}tdD]}||t|t|jz|d zt|jzD]-}|d ||kr |j|nd .|d |r| d Sd S#|r| wwxYw) zVSave palette to text file. .. warning:: This method is experimental. r7FwTz # Palette z# Mode:  rGr rN) rr9r:ropenwriterr&rr'close)rr\r<open_fp palette_lenr*js rsavezImagePalette.savesz < "5CS// ! b#   b#BG  HH] # # # HH- --- . . .dl++K3ZZ  A   q3ty>>1AES^^3KLLNNAHHLA OOaLLMMMM       w   s C/E E&)rN)rrrrrr)rr)rrrr)rr$)r,r$rr)rr )rr1)rr5)NN)r>r?r@rArrBr)r+rRr>r?rrB)r\r]rr)__name__ __module__ __qualname____doc__rpropertyrsetterr,r0r4r3tostringrQr[rhrDrrr r sY  <@&&&&&X ^   ^    X  ]]     ) ) ) )    HGK:%)*"*"*"*"*"Xrr rrdatarrcLt}||_||_d|_|S)Nr)r rrr)rrprs rrawrrs%nnGGOGOGM NrblackrBwhitefloat list[int]ch|dkrfdtdDSd}t|)Nrc:g|]}t|zdzSrXrB).0r*rts r z#make_linear_lut..s*:::!EAI$%%:::rrGz"unavailable when black is non-zero)r'NotImplementedError)rsrtr<s ` rmake_linear_lutr}s? zz::::uSzz:::: .C c " ""rexpc:fdtdDS)NcFg|]}t|dz zdzdzS)go@g?ry)rzr*r~s rr{z"make_gamma_lut..s4 H H HC!e)#u,s2 3 3 H H HrrG)r')r~s`rmake_gamma_lutrs# H H H HU3ZZ H H HHrrrcttdtz}|t fd|DS)NrGc4g|]}|tzSrDr&rzr*rs rr{znegative..#???!qCII~???r)rKr'r&reverser rrs` rnegativersW5s4yy))**G OO ????w??? @ @@rcddlmfdtdt|zD}t ||S)Nr)randintc(g|]}ddS)rrVrD)rz_rs rr{zrandom..s#???1wwq#???rrG)randomrr'r&r )rrrs @rrrsP????cCIIo(>(>???G g & &&r#fff0c0cdtj|DtdfdtdDS)Nc.g|]}td|S)r)r})rzbands rr{zsepia..s" K K K$_Q % % K K Krrc8g|]}|dz|dzS)rUrD)rzr*bandss rr{zsepia..s*MMMa!e Q!V 4MMMri)r getrgbr r')rtrs @rsepiarsL K K*2CE2J2J K K KE MMMMeGnnMMM N NNrcttdtz}tfd|DS)NrGc4g|]}|tzSrDrrs rr{zwedge..rr)rKr'r&r rs` rwedgersG5s4yy))**G ????w??? @ @@rfilenametuple[bytes, str]cft|d5}tjtjtjg}|D]P} |d||}|rn):#t tf$rYMwxYwd}t| dddn #1swxYwY|S)Nrbrzcannot load palette) rbrrr seek getpalette SyntaxErrorr9OSError)rr\paletteHandlerspaletteHandlerlutr<s rloadrs h    +  -  # .  N  $nR((3355E,    (C#,,  #0 Js4(B&4A1.B&1BB&BB&&B*-B*)rrrprrr )rsrBrtrurrv)r~rurrv)r)rrrr )r)rtrrr )rrrr) __future__rr;collections.abcrtypingrrrr r TYPE_CHECKINGr r rrr}rrrrrrrDrrrs$#""""" $$$$$$HHHHHHHHHHHH rrrrrrrrr####IIIIAAAAA '''''OOOOO AAAAA r