
    7i#&              
           d dl mZmZ d dlmZ d dlZd dlmZ d dlm	Z	 d dl
mZmZ d dlmZmZ 	 dded	ed
edee   fdZy)    )ListOptional)PathN)Image)PSDImage)render_layer_alpha_fullsizeresize_and_crop_to_fill)KEYWORDS
LOGO_LAYER	base_pathoverlay_path
output_dir	logo_pathc           
      z  DEFGH t        j                  |       }t        |j                               }g }g }dt        t
           fdD|D ]  }	 t        |d      r|j                  st        |dd      xs dj                         Ht        Hfdt        D              r D|      }	|	r|j                  ||	f       rt        |dd       }
|
dk(  st        Hfd	t        D              r D|      }	|	r|j                  ||	f        |st        d
      g }t!        |      D ]  \  }\  }}|\  }}}}||z
  ||z
  z  }d}t!        |      D ]A  \  }\  }}||k(  r|\  }}}}||z
  ||z
  z  }||k  s'||k  s-||k\  s3||k\  s9||kD  s?d} n |ro|j                  ||f        |r|n|}d!d}g }g }d } t#        |d       D ]  \  }}	|s||	fg}|	}  ||d   d   |	      rZ|j                  ||	f       t%        | d   |	d         t%        | d   |	d         t'        | d   |	d         t'        | d   |	d         f} y|j                  || f       ||	fg}|	}  |r|j                  || f       g }!d }"t        |dd      }#|D ]M  \  }$}%|%d   |%d   z
  }&|%d   |%d   z
  }'|'d|#z  k  s|&t'        d|'      z  dkD  r|$|%f}";|!j                  |$|%f       O |!s||d   d   fg}!t)        |      dk\  }(t+        j                  |      j-                  d      })|)j.                  \  }*}+|dv rd },n$t+        j                  |      j-                  d      },|(r%dt0        fDfdFg }-|!D ]-  \  }$}%t3        Ffd|$D              }.|-j                  |$|%|.f       / t3        d |-D              }/|/dk(  r5|-D $%cg c]  \  }$}%}|$|%|%d   |%d   z
  f }-}%}$}t3        d |-D              }/|/dk(  rt5        d      |-D 0cg c]
  }0|0d   |/z   }1}0dg}2d}3|1D ]$  }4|3t1        |4|*z        z  }3|2j                  |3       & |*|2d<   t7        t)        |2      dz
        D cg c]   }|)j9                  |2|   d|2|dz      |+f      " }5}n|)g}5|D ]  \  }6}	 d|6_         |D ]  \  }6}	 d|6_         |j;                         j-                  d      EEj.                  }7|D ci c]  \  }}t=        |      t?        |||7       c}}G|D ]  \  }}t?        |||7      Gt=        |      <     EGfd}8|(r7tA        |!|5      D ]  \  \  }9}%}: |8|9|%|:        |"r: |8|"d   |"d   |5d          n&|!D ]  \  }9}% |8|9|%|)        |"r |8|"d   |"d   |)       |,r|D ]  \  }}%|%\  };}<}=}>|=|;z
  |>|<z
  }'}&|&dk  s|'dk  r"tC        |,|&|'      }?GjE                  t=        |            }@|@&@j9                  |;|<|=|>f      jG                  |&|'f      nd }A	 EjI                  |?|;|<fArAn|?        tK        jL                         jN                   d }BtQ        |      |Bz  }CEjS                  |C       tU        |C      S # t        $ r Y w xY wc c}}%}$w c c}0w c c}w # t        $ r Y 
w xY w# t        $ r Y w xY wc c}}w # t        $ r EjI                  |?|;|<f       Y Aw xY w)"Nreturnc                 l   t        | dd       }|sy 	 t        |t        t        f      rt	        t
        |      \  }}}}nWt        |j                        t        |j                        t        |j                        t        |j                        f\  }}}}||kD  r||kD  r||||fS d S # t        $ r Y y w xY w)Nbbox)getattr
isinstancetuplelistmapintx1y1x2y2	Exception)layerr   r   r   r   r   s         P/var/www/html/story-book/Story-Book-python-api/app/utils/generate_final_image.py
_safe_bboxz(generate_final_image.<locals>._safe_bbox   s    ufd+	$.!$S$BB!$TWWs477|S\3tww<!WBB(*RBGBB#F$F 		s   BB' %B' '	B32B3visiblename c              3   &   K   | ]  }|v  
 y wN .0kr#   s     r    	<genexpr>z'generate_final_image.<locals>.<genexpr>2   s     1j19j   kindsmartobjectc              3   &   K   | ]  }|v  
 y wr&   r'   r(   s     r    r+   z'generate_final_image.<locals>.<genexpr>:   s     +Hx!AIxr,   z No design layers detected in PSDFTc                    	 | \  }}}}|\  }}	}
}||z
  ||	z
  }}||z   dz  }|	|z   dz  }t        ||z
        t        ||      |z  kD  ryt        d||z
  ||
z
        }||z
  |
|z
  z   dz  }|||z  k  S # t        $ r Y yw xY w)N   Fr   )absmaxr   )b1b2y_tol_ratiogap_tol_ratiox11y11x12y12x21y21x22y22h1h2yc1yc2gapavgws                     r    	same_wrapz'generate_final_image.<locals>.same_wrapa   s    	!#Cc3!#Cc33Yc	B9/C9/C39~Bk 99asC#I.C3Y39-2D$... 		s   AA2 	(A2 2	A>=A>c                     | d   d   S )N   r   r'   )xs    r    <lambda>z&generate_final_image.<locals>.<lambda>w   s    ad1g    )keyrH   r   r1      heightg?g      @RGBA)Nr$   Nonec                    	 t        | dd      }|rdD ]J  }t        ||d      }t        |      s	  |       }t        |d      rt        d|j                  d         c S L t        |dd      xs t        |dd      }t        |t              rt        d|      S t        |t        t        f      rt        d|d         S  |       }|r|\  }}}	}
t        d|	|z
        S y# t
        $ r Y w xY w# t
        $ r Y ;w xY w)	zAReturn internal smart-object width if available, else bbox width.smart_objectN)imageas_PILas_pilas_PIL_imagesizerH   r   widthw)
r   callablehasattrr3   rX   r   r   r   r   r   )	layer_objsoattrfnimgrZ   r   r   r   r   r   r!   s              r    get_internal_widthz0generate_final_image.<locals>.get_internal_width   s   Y= M$Rt4#B<%&(d#*3#7+.q#((1++>$> $8 !N  GT2Lgb#t6LA!!S)"1ay(!!eT]3"1ad|+
 i(D!%BB1b2g& ' $- % $%  s@   ,C. +CC. 9C. $C. 	C+(C. *C++C. .	C:9C:c              3   H   K   | ]  \  }}t         |      d         yw)rH   N)r3   )r)   l_rb   s      r    r+   z'generate_final_image.<locals>.<genexpr>   s#     D!$!Q.q115!s   "c              3   &   K   | ]	  }|d      yw)r1   Nr'   )r)   ss     r    r+   z'generate_final_image.<locals>.<genexpr>   s     +d!ds   c              3   :   K   | ]  \  }}}|d    |d   z
    yw)r1   r   Nr'   )r)   re   bbs      r    r+   z'generate_final_image.<locals>.<genexpr>   s#     ADjq"aBqEBqEMDs   z'Invalid smart-object width computation.c                    |\  }}}}||z
  ||z
  }}|dk  s|dk  ry t        |||      }	| D ]  \  }
}|\  }}}}||z
  ||z
  }}||z
  }||z
  }|	j                  ||||z   ||z   f      }j                  t        |
            }|r'|j                  ||||f      j	                  ||f      }nd }	 j                  |||f|r|n|        y # t        $ r j                  |||f       Y w xY w)Nr   )r	   cropgetidresizepaster   )group_layersgbbseggx1gy1gx2gy2gwghresizedr   ri   r   r   r   r   zone_wzone_hrxrypiecemask	mask_zonebaselayer_maskss                          r    apply_groupz)generate_final_image.<locals>.apply_group  s    S#ssC#IB7bAg)#r26%IE2NBB"Wb2gFFcBcBLL"b"v+rF{!CDE??2e9-D IIr2r2&67>>?OP	 	,

52r(IN! &"  ,

52r(+,s   /CC+*C+z
_final.png)g      ?g      ?)+r   openr   descendantsr   r   r\   r"   r   loweranyr   appendr
   r   
ValueError	enumeratesortedminr3   lenr   convertrX   r   sumRuntimeErrorrangerk   	compositerm   r   zipr	   rl   rn   ro   uuiduuid4hexr   savestr)Ir   r   r   r   psd
all_layersfilteredlogo_layersr   r   r-   cleanedilibbixi1yi1xi2yi2area_iskipjre   bbjxj1yj1xj2yj2area_jrF   groupscurcur_bboxwrap_groups
tilt_grouppsd_hgri   rZ   his_wrapoverlay_img	overlay_W	overlay_Hlogo_imgsegstotal	total_allrg   ratioscutsaccroverlay_slicesrd   canvas_sizer   grprr   r   r   r   r   resized_logor   r   
final_name
final_pathr!   r   rb   r   r#   sI                                                                       @@@@@r    generate_final_imager      s    --	
"Ccoo'(JH!KXe_  	ui(E62.4";;=D 1j11!%(&&t}5 5&$/D}$+Hx+H(H!%(OOUDM2' 0 ;<< G!(+9B S#s)c	*$X.KAx3Av!$Cc3CiC#I.F s
sczs
scz / NNB9%+ ,. "wxH$ F
CHh,=>t4=/CHSWQZ&JJt}%HQKa)HQKa)HQKa)HQKa)	H MM3/*4=/CH# ?& sHo&KJC1%E2qEBqEMqEBqEMte|C1I4RJ2w'   (1+a.12(mq G **\*226:K&++Iy&&::i(008 "	S "	H  EArD!DDEKKB' ! +d++	>=ABTz2qQBqEBqEM*TDBADAAI>HII,01Dq!A$"D1sA3q9}%%CKK  R 3t9q=)
) d1gq$q1u+yAB) 	 

 & 1	AI  1	AI  ==?""6*D))K
 #"JUA 	5	.sE;GG"K "
!<S%!UBuI ",: !+~>NIS"sR% ?
1z!}nR6HI$IS"R- %
1z!}kB $IE2NBB7BGqAAva28QBL??2e9-D # 		2r2r*+22Aq6:)- 
3

<"b	9|\ %( JJL$$%Z0Jj!J.JIIjz?U  		l C 2
  		  		H  3

<"b23sn   Y(AY=AY(Y"+Y)%Y.<Y3Z!Z,Z	YY3	Z ?Z 	ZZZ:9Z:r&   )typingr   r   pathlibr   r   PILr   	psd_toolsr   app.utils.imager   r	   app.core.constantsr
   r   r   r   r'   rK   r    <module>r      sU    !     4  $	zzz z }	zrK   