
    ^OgJ                        S SK Jr  S SK Jr  S SK Jr  S SK Jr  S SKrS SKrS SKJr	  S SK
Jr  S SKrS SKJrJr  S S	KJr  S S
KJrJr  S SKJrJrJr  S\R0                  -  rS/rS rS rS rS rS rS r S r!S r"S'S jr#S r$S(S jr%S r&S r'S r(S r)SSSSSSSSSS\\SSSSSSS 4S! jr*\" S"S#9S$ 5       r+S% r,S)S& jr-g)*    )absolute_import)division)print_function)unicode_literalsN)Image)	lru_cache)StringIOBytesIO)settings)IMAGE_DEFAULT_QUALITYIMAGE_DEFAULT_FORMAT)MEDIA_STORAGESTATIC_STORAGEIMAGE_CACHE_STORAGEz%s/_internal/PNGc                 Z    U S::  a  U S-  n OS[        U S5      -  S-
  n [        U S-  5      $ )Ngsåi?ףp=
)@zG?gª?)\(?     o@)powroundvalues    P/Users/admin/workspace/ai/Jarvis/env/lib/python3.13/site-packages/image/utils.pypower_to_rgbr      s8    	E>22U:    c                 `    [        U 5      S-  n U S::  a  U S-  n U $ [        U S-   S-  S5      n U $ )Nr   g?ܵ?r   r   r   g333333@)floatr   r   s    r   rgb_to_powerr       sD    %L5 E L UU]e+S1Lr   c                 F   US   nU S   nUS:X  aL  US:X  aF  X#-   nX&-  nX6-  nU S   U-  US   U-  -   U S   U-  US   U-  -   U S   U-  US   U-  -   XX-  XG-  -   4$ X#-   nX&-  nX6-  nU S   U-  US   U-  -   U S   U-  US   U-  -   U S   U-  US   U-  -   XX-  XG-  -   4$ )N         ?r          )	pixelrgba	x_ammountx_displacementapatotal_ammountrgba_ammountpixel_ammounts	            r   add_rgba_to_pixelr0   '   s!   QA	qBCxB#I!2 0&6!H}$tAw'==!H}$tAw'==!H}$tAw'==!11	
 	
 "2 0&6 !H}$tAw'==!H}$tAw'==!H}$tAw'==!11	
 	
r   c                    U R                   u  pE[        U5      [        U5      -  nU(       a  UnUnO[        X5      n[        X%5      nUn	X-  n
X:  a  Un
X-  n	U R                  [	        U	5      [	        U
5      4[
        R                  5      n U $ N)sizer   minresizeintpil	ANTIALIAS)imgwidthheightforce	src_width
src_height	src_ratio	max_width
max_height	dst_width
dst_heights              r   resizeScalerD   B   s    HHIi 5#44I	
)	,
I&J
*	 **c)nc*o6
FCJr   c           	      ,   UnUnU(       d#  U R                  XV4[        R                  5        U $ U R                  u  px[	        U5      [	        U5      -  n	XVp[	        U
5      [	        U5      -  nX:  a  UnX-  n[	        X~-
  5      S-  nSnOUnX-  nSn[	        X-
  5      S-  nUR                  S5      u  nn[	        U5      n[	        U5      n[        [        SUU-  US-  -
  5      X~-
  5      n[        [        SUU-  US-  -
  5      X-
  5      nU R                  [        U5      [        U5      [        U5      [        U5      -   [        U5      [        U5      -   45      n U R                  [        U
5      [        U5      4[        R                  5      n U $ )z
# Esto no hace nada perceptible
RATIO = 2
while img.size[0] / RATIO > width or img.size[1] / RATIO > height:
    img = img.resize((int(img.size[0]/RATIO), int(img.size[1]/RATIO)), pil.ANTIALIAS)
r%   r   ,)	thumbnailr7   r8   r3   r   splitr4   maxcropr6   r5   )r9   r:   r;   centerr<   r@   rA   r=   r>   r?   rB   rC   	dst_ratiocrop_height
crop_widthx_offsety_offsetcenter_xcenter_ys                      r   
resizeCroprS   Z   s    IJy-s}}=F JC !$	)$uZ'88	 ):)$uZ'88	 $K$0JY34q8HH"J$0KHZ56:H#\\#.(??8i'*q.89"
 8j(;?:;$

 hh]CM3x=3z?+JCPXM\_`k\lLlmojj#i.#j/:CMMJJr   c                 >   U(       a  US:X  a  g U R                   S:w  a  U R                  S5      n  [        [        SUSS -  S5      5      S-  n [        [        SUSS	 -  S5      5      S-  n [        [        SUS	S
 -  S5      5      S-  n [        [        SUS
S -  S5      5      S-  n [        [        SUSS -  S5      5      nUS:  Ga  US:w  d  US:w  d  US:w  d  US:w  Ga  U R                  5       nUS:X  a  [        U R                  S   5       H  n[        U R                  S   5       Hs  n	XyU4   n
[        [        U
S   5      U-  5      [        [        U
S   5      U-  5      [        [        U
S   5      U-  5      [        [        U
S   5      U-  5      4XyU4'   Mu     M     g US-  nSU-
  nX&-  nX6-  nXF-  nXV-  n[        U R                  S   5       H  n[        U R                  S   5       H  n	XyU4   n
[        [        U
S   5      U-  [        U
S   5      U-  -   5      [        [        U
S   5      U-  [        U
S   5      U-  -   5      [        [        U
S   5      U-  [        U
S   5      U-  -   5      [        [        U
S   5      U-  [        U
S   5      U-  -   5      4XyU4'   M     M     g g g ! [         a    Sn GNf = f! [         a    Sn GNtf = f! [         a    Sn GNhf = f! [         a    Sn GN\f = f! [         a    Sn GNSf = f)NNoneRGBA0x%sr   r%      r   r#            
           r$   r"   )modeconvertr   r6   
ValueErrorloadranger3   )r9   tinttint_red
tint_green	tint_blue
tint_alpha	intensitypixelsyxdataintensity_invs               r   do_tintrn      sA   46>
xx6kk&!Vd1Qi/45=3vQq	1267%?
#ftAay0"56>	3vQq	1267%?
#ftAbz1267	 3HOzS/@IQTDTXbfiXi 388A;'sxx{+A!Q$<DE$q'NX56E$q'NZ78E$q'NY67E$q'NZ78	$Fa4L , ( "E)I	MM!H#J"I#J388A;'sxx{+A!Q$<DE$q'N]:U47^h=VVWE$q'N]:U47^j=XXYE$q'N]:U47^i=WWXE$q'N]:U47^j=XXY	$Fa4L , (+ Yj/  
  

  	
  

  	sY   K  K /K& K9 -L  KKK#"K#&K65K69L	L	LLc                 B    U R                  S5      R                  S5      $ )NLArV   )r_   )r9   s    r   do_grayscalerq      s    ;;t$$V,,r   c                     UR                   S:w  a  UR                  S5      n[        R                  " SU R                  SS9nUR                  X5        [        R                  " X5      $ )NrV   )   rs   rs   r   )color)r^   r_   r7   newr3   pastealpha_composite)r9   overlaypositionoverlay_fulls       r   do_paster{      sV    ||v//&)
 7763883EFLw)
 s11r   c                 r   U(       d  U $ US:X  a+  [         R                  " [        R                  " U5      5      nO*[         R                  " [        R                  " U5      5      nU R                  u  pxUR                  u  p[        U	5      [        U
5      -  nU(       a  UR                  S5      u  p[        [        [        UR                  5       5      U-  5      5      n	[        [        [        UR                  5       5      U-  5      5      n
U	S:  a  X-  n	O
U
S:  a  X-  n
[        XiXS-   U-   5      nUR                  u  pOiSnX:  a  Un	[        [        U5      U-  5      n
SnX:  a  [        [        U5      U-  5      n	Un
SnU(       a   [        XiXS-   U-   5      nUR                  u  pU(       a  [        Xc5        U(       d"  [        Xy-
  S-  5      n[        X-
  S-  5      nGO@UR                  S5      u  nnUR                  5       nUR                  5       nUS:X  a  [        Xy-
  S-  5      nOoS	U;   aG  S
[        UR                  S	S5      R                  5       5      -
  n[        [        UU-  5      U	-
  5      nO"[        U5      n[        [        UU-  5      5      nUS:X  a  [        X-
  S-  5      nOoS	U;   aG  S
[        UR                  S	S5      R                  5       5      -
  n[        [        UU-  5      U
-
  5      nO"[        U5      n[        [        UU-  5      5      n [        XUU45      n U $ )NmediarF   r   /FTr%    !r#   )r7   openr   r   r3   r   rH   r6   r   striprD   rn   replacer{   )r9   overlay_pathoverlay_sourceoverlay_tintoverlay_sizeoverlay_positionrx   iwihowohoverlay_ratiotwthhave_to_scaletarget_xtarget_ytxty	x_percent	y_percents                        r   
do_overlayr     s   
 ((=--l;<((>..|<= XXFB\\FB"Ib	)M##C(uRXXZ(2-./uRXXZ(2-./6#B!V#Bg2/Cl/RSB7BU2Y./B M7U2Y./BB M!'rC3G,3VWG\\FB&1}%1}%!'',BXXZXXZ8BGq=)Hby%

3(;(A(A(C"DD	uY^4r9: ""I	uY^458BGq=)Hby%

3(;(A(A(C"DD	uY^4r9: ""I	uY^45
 3(H!5
6CJr   c           	      X   SnU HA  n X&   nUS:X  a  S n X6   n	 XF   n
U
S:X  a  S n
 XV   nUS:X  a  S n[        XXX5      n US-  nMC     U $ ! [         [        4 a    S n NSf = f! [         [        4 a    Sn	 N^f = f! [         [        4 a    S n
 Nqf = f! [         [        4 a    S n N|f = f)Nr   rU   staticr$   )
IndexError	TypeErrorr   )r9   overlaysoverlay_tintsoverlay_sourcesoverlay_sizesoverlay_positionsoverlay_indexrx   r   r   r   r   s               r   do_overlaysr   g  s    M	 (7L 6!L	&,;N	 (7L 6!L	$0? v%#~\dA D J= I& 	 L	  I& 	&%N	&
 I& 	 L	  I& 	$#	$sD   AA$A<BA! A!$A98A9<BBB)(B)c           	         U(       d  U $ US:X  a:  [         R                  " [        R                  " U5      5      R                  S5      nO9[         R                  " [        R                  " U5      5      R                  S5      nUS:X  aH  U R
                  u  pVUR
                  u  pxXu:w  d  X:w  a!  UR                  XV4[         R                  5      nOU R
                  u  pVUR
                  u  p[        U	5      [        U
5      -  nSnX:  a  Un	[        [        U5      U-  5      n
X:  a  [        [        U5      U-  5      n	Un
X:w  d  X:w  a  SnU(       aq  UR                  X4[         R                  5      n[         R                  " SXV45      n[        XM[        XY-
  S-  5      [        Xj-
  S-  5      45      nUR
                  u  pUR                  5       u  pnnU R                  U5        g )Nr}   rV   distortFTr%   )r7   r   r   r_   r   r3   r5   r8   r   r6   ru   r{   rH   putalpha)r9   	mask_pathmask_source	mask_modemaskr   r   mwmhr   r   r   r   nmaskrgbr+   s                     r   do_maskr     s   
gxx**956>>vFxx++I67??G I8rx;;x7D b	E"I-7BU2Y./B7U2Y./BB8rx MKK#--8E776B8,DD#rw!m*<c27a->P)QRDYYFBJA!QLLOr   c           	      f   U(       d  U $ U n[        SUSS -  S5      [        SUSS -  S5      [        SUSS -  S5      [        SUSS -  S5      4n[        R                  " SX#4U5      n U R                  u  pgUR                  u  p[	        X[        Xh-
  S-  5      [        Xy-
  S-  5      45      n U $ 	NrW   r   r%   rX   rY   rZ   r[   rV   r6   r7   ru   r3   r{   )
r9   fillr:   r;   rx   
fill_colorr   r   r   r   s
             r   do_fillr     s    
G 	FT!AY#FT!AY#FT!AY#FT!AY#	J ''&5/:
6CXXFB\\FB 3#rw!m"4c27a-6H!I
JCJr   c                    U(       d  U $  [        U5      S-  nUS:  a  SnUS::  a  U $  U R                  u  p#U R                  [	        [        [        U R                  S   5      SU-
  -  5      5      [	        [        [        U R                  S   5      SU-
  -  5      5      4[        R                  5        [        U SX#5      n U $ ! [         a     g f = f)Ng       @g?r]   r   r#   r$   ffffff00)	r   r`   r3   rG   r6   r   r7   r8   r   )r9   paddingr   r   s       r   
do_paddingr     s    
.3&R<Gc>J 
 XXFBMMeCHHQK(C'M:;<eCHHQK(C'M:;<	
 	 #z2
*CJ  s   C 
CCc           	      x   U(       d  U $ U n[        SUSS -  S5      [        SUSS -  S5      [        SUSS -  S5      [        SUSS -  S5      4n[        R                  " SUR                  U5      n U R                  u  pEUR                  u  pg[	        X[        XF-
  S-  5      [        XW-
  S-  5      45      n U $ r   r   )r9   
backgroundrx   r   r   r   r   r   s           r   do_backgroundr     s    
G 	FZ!_$b)FZ!_$b)FZ!_$b)FZ!_$b)	J ''&',,

3CXXFB\\FB 3#rw!m"4c27a-6H!I
JCJr   c                     U(       d  U $  [        U5      nUS-  S:X  a!  U R                  U[        R                  SS9n U $ U R                  U[        R
                  SS9n U $ ! [         a    Sn NYf = f)Nr   Z   T)expand)r   r`   rotater7   NEARESTBICUBIC)r9   rotations     r   	do_rotater     sz    
? "}jj3;;tj< J jj3;;tj<J  s   A! !A0/A0Tr&   z.5,.5Fc                 ^   [        U [        R                  5      (       d  [        U 5      nO[	        U 5      n[
        R                  " U5      nUR                  S:w  a  UR                  S5      nUc  UR                  S   nUc  UR                  S   n[        UU5      nU(       a  [        UXX5      nO[        UXU5      nU(       a  [        U5      n[        UU5        [        UXU5      n[!        UU5      n[#        UX5        [%        UXWXhU	5      n['        UU5      n[        UU5      n[        5       nUR)                  5       [*        ;  a  UR                  S5      nUR-                  UXS9  UR/                  S5        UR1                  5       nUR3                  5         UR3                  5         U$ )zs
Rescale the given image, optionally cropping it to make sure the result image has the specified width and height.
rV   r   r$   RGB)quality)
isinstancesixstring_typesr
   r	   r7   r   r^   r_   r3   r   rS   rD   rq   rn   r   r   r   r   r   upperALPHA_FORMATSsaveseekgetvalueclose)rl   r:   r;   r<   r   r   r   r   r   r   r   r   rK   formatr   r   r   rc   pre_rotationpost_rotationrJ   	grayscale
input_filer9   tmpoutput_datas                             r   renderr     sh    dC,,--T]
d^

((:
C
xx6kk&!}~!
C
&CeV;#ue43C
#tF
+C
Z
(CC#
c8OTe
fC
S'
"C
C
'C
)C<<>]*kk% HHS&H*HHQK,,.KIIKr      )maxsizec                 n    S[         R                  " U R                  S5      5      R                  5       -  $ )Nzimage_token_%sutf8)hashlibsha1encode	hexdigest)
parameterss    r   image_create_tokenr   I  s*    gll:+<+<V+DEOOQQQr   c                     U (       a8  S nU R                  5        H  u  p4XA:X  d  M  Un  O   Uc  [        U5      nXU'   U$ [        U5      nU$ r2   )itemsr   )sessionr   tokenkvs        r   image_tokenizer   N  sY    MMODA $ =&z2E'EN L #:.Lr   c                    U(       a%  SSK Jn  SU;   nUR                  U [        U5      XS9  [        R                  R                  [        U R                  U5      [        R                  " U5      5      n[        R                  " U5      $ )Nr   )viewszautogen=true)requestpathr   autogen)imager   strosr   joinr   r   r   	text_typer   url)r   r   image_fieldgenerateimage_viewsr   
image_paths          r   	image_urlr   ]  sf    . J.'K0@
dnW__jI3==YdKefJ"":..r   )NNNNr2   )F).
__future__r   r   r   r   r   r   PILr   r7   	functoolsr   r   r	   r
   r   r   image.settingsr   r   image.storager   r   r   IMAGE_CACHE_ROOTINTERNAL_CACHE_ROOTr   r   r    r0   rD   rS   rn   rq   r{   r   r   r   r   r   r   r   r   r   r   r   r&   r   r   <module>r     s    &  % '  	   
 !  F L L%(A(AA  
60/d=@-2@Tn%P(V.6." '+D2WY44d`d"6@U\`mq4t$RW2j 3R R/r   