ó
    ‚¤jt/  ã                  ó  • 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J	r	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Jr  S S	KJr  S S
KJr  S SKJr  S SKJr  S SKJr  S SK J!r!  \RD                  RG                  5         SS jr$  S           S S jjr% S!     S"S jjr&      S#S jr'S$S jr(S%S jr)S&S jr*S!S'S jjr+S(S jr,S)S jr-S*S jr.S*S jr/\!" S5                  S+S j5       r0 S,         S-S jjr1g).é    )ÚannotationsN)ÚBytesIO)ÚPath)ÚLiteralÚcast)Úquote)Úutils)Úget_mimetypeÚis_http_url_like)ÚImageOps)Úprocessing_utils)ÚWatermarkOptions)Ú	ImageData)ÚError)Útraced_syncc                ó”  • [        U [        R                  5      (       a!  [        R                  R                  U 5      nU$ [        U [        [        45      (       a!  [        R                  R                  U 5      nU$ [        U [        R                  R                  5      (       a  U nU$ [        S[        [        U 5      5      -   5      e)zÊ
Provided an array, PIL Image or filepath, return a PIL Image.
Parameters:
    orig_img: Local image file. If a filepath, it must be a webp, png, jpeg, or bmp.
Returns:
    open_img: A PIL.Image.Image.
zeExpected image or path to image of type webp, png, bmp or jpeg; PIL image; or numpy array. Received  )Ú
isinstanceÚnpÚndarrayÚPILÚImageÚ	fromarrayÚstrr   ÚopenÚ
ValueErrorÚtype)Úorig_imgÚopen_imgs     Ú C:\Users\johnn\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\gradio/image_utils.pyÚ
open_imager       s¢   € ô �(œBŸJ™J×'Ñ'Ü—9‘9×&Ñ& xÓ0ˆð €Oô 
�Hœs¤D˜k×	*Ñ	*Ü—9‘9—>‘> (Ó+ˆð €Oô 
�HœcŸi™iŸo™o×	.Ñ	.Øˆð €Oô	 ØsÜ”$�x“.Ó!ñ"ó
ð 	
ó    c                ó   • U c  U $ US:X  a  U $ US:X  a  [         R                  " U 5      $ US:X  a   [        R                  " XX4S9nU$ [        S[        U5      -   S-   5      e! [        [
        4 a    [        R                  " U UUSS9n U$ f = f)z3Helper method to format an image based on self.typeÚpilÚnumpyÚfilepath)Ú	cache_dirÚnameÚformatÚpngzUnknown type: z1. Please choose from: 'numpy', 'pil', 'filepath'.)r   Úarrayr   Úsave_pil_to_cacheÚKeyErrorr   r   )Úimr   r&   r'   r(   Úpaths         r   Úformat_imager/   0   s¶   € ð 
�zØˆ	Øˆuƒ}Øˆ	Ø	�‹Ü�xŠx˜‹|ÐØ	�Ó	ð	Ü#×5Ò5Ø¨dñˆDð ˆäØÜ�$‹iñàAñBó
ð 	
øô œ*Ð%ó 	Ü#×5Ò5ØØ#ØØñ	‰Dð ˆð	ús   ±A" Á"'BÂBc                óþ  • [        U [        R                  5      (       a  [        R                  " XUS9nU$ [        U [
        R                  R                  5      (       a   [        R                  " XUS9nU$ [        U [        5      (       a  [        U 5      nU$ [        U [        5      (       a  U nU$ [        S[        [        U 5      5      -   5      e! [        [        4 a    [        R                  " XSS9n U$ f = f)N©r&   r(   r)   z6Cannot process this value as an Image, it is of type: )r   r   r   r   Úsave_img_array_to_cacher   r   r+   r,   r   r   r   r   )Úyr&   r(   r.   s       r   Ú
save_imager4   T   sõ   € ô �!”R—Z‘Z× Ñ Ü×7Ò7Ø¨6ñ
ˆð, €Kô' 
�A”s—y‘y—‘×	'Ñ	'ð	Ü#×5Ò5Ø¨vñˆDð" €Kô 
�A”t×	Ñ	Ü�1‹vˆð €Kô 
�A”s×	Ñ	Øˆð €Kô	 ØDÄsÌ4ÐPQË7Ã|ÑSó
ð 	
øô œ*Ð%ó 	Ü#×5Ò5Ø¨uñ‰Dð €Kð	ús   Á!C Ã%C<Ã;C<c                ó€  • [        U 5      n U R                  u  p#[        [        [        R                  [
        R                  R                  -  [        -  [        -  UR                  5      5      Ul	        UR                  R                  u  pE[        UR                  [        5      (       ae  SnUR                  S:X  a  Xfp‡O^UR                  S:X  a	  X$-
  U-
  Up‡OEUR                  S:X  a	  XcU-
  U-
  p‡O,UR                  S:X  a  X$-
  U-
  X5-
  U-
  p‡OUR                  u  pxWS:  d  Xt-   U:”  d  WS:  d  X…-   U:”  a  X$-
  S-
  nX5-
  S-
  nXx4n	U R                  n
U R                  S5      n UR                  R                  S5      Ul	        U R                  UR                  X‘R                  S9  U R                  U
5      n U $ )	a_  Overlays a watermark image on a base image.
Parameters:
    base_img: Base image onto which the watermark is applied. Can be an array, PIL Image, or filepath.
    watermarkOption: WatermarkOptions instance containing watermark image and position settings.
Returns:
    watermarked_img: A PIL Image of the base image overlaid with the watermark image.
é
   ztop-leftz	top-rightzbottom-leftzbottom-rightr   ÚRGBA)Úmask)r    Úsizer   r   r   r   r   r   r   Ú	watermarkr   ÚpositionÚmodeÚconvertÚpaste)Úbase_imgÚwatermark_optionÚbase_img_widthÚbase_img_heightÚwatermark_widthÚwatermark_heightÚpaddingÚxr3   Úwatermark_positionÚorig_img_modes              r   Úadd_watermarkrI   q   s¿  € ô ˜(Ó#€HØ&.§m¡mÑ#€NÜ!+ÜŒR�Z‰Zœ#Ÿ)™)Ÿ/™/Ñ)¬CÑ/´$Ñ6Ð8H×8RÑ8RÓSó"ÐÔð )9×(BÑ(B×(GÑ(GÑ%€OäÐ"×+Ñ+¬S×1Ñ1ØˆØ×$Ñ$¨
Ó2Ø‰qØ×&Ñ&¨+Ó5Ø!Ñ3°gÑ=¸w‰qØ×&Ñ&¨-Ó7ØÐ.>Ñ>ÀÑH‰qØ×&Ñ&¨.Ó8àÑ0°7Ñ:ØÑ2°WÑ<ð øð
  ×(Ñ(‰ˆð 	
ˆA‹ØÑ Ó/Øˆq‹5ØÑ /Ó1àÑ,¨rÑ1ˆØÑ.°Ñ3ˆà˜ÐØ—M‘M€MØ×Ñ Ó'€HØ!1×!;Ñ!;×!CÑ!CÀFÓ!KÐÔØ‡N�NØ×"Ñ"Ð$6×=WÑ=Wð ñ ð ×Ñ Ó.€Hà€Or!   c           	     ó  • U R                   u  p4X-  nX4-  U:”  a  UnXe-  nOUnXu-  nX7-
  S-  nXF-
  S-  n	U R                  [        U5      [        U	5      [        X‡-   5      [        X–-   5      45      n
U
R                  X45      nU$ )Né   )r9   ÚcropÚintÚresize)ÚimgÚfinal_widthÚfinal_heightÚoriginal_widthÚoriginal_heightÚtarget_aspect_ratioÚcrop_heightÚ
crop_widthÚleftÚtopÚimg_croppedÚimg_resizeds               r   Ú
crop_scaler[   ¨   s¤   € Ø&)§h¡hÑ#€NØ%Ñ4ÐàÑ'Ð*=Ó=Ø%ˆØ Ñ6‰
à#ˆ
Ø Ñ6ˆàÑ'¨1Ñ,€DØÑ(¨AÑ
-€Cà—(‘(Ü	ˆT‹”C˜“Hœc $Ñ"3Ó4´c¸#Ñ:KÓ6LÐMó€Kð ×$Ñ$ kÐ%@ÓA€KàÐr!   c                óD  • [         R                  " U 5      n[        R                  R	                  [        [        R                  " U5      5      5      n [        [        S5      (       a  [        R                  " U5      nUc   eU$ ! [         a    [        SU5         Nf = f)NÚexif_transposez0Failed to transpose image %s based on EXIF data.)r   Úextract_base64_datar   r   r   r   Úbase64Ú	b64decodeÚhasattrr   r]   Ú	ExceptionÚprint)ÚencodingÚimage_encodedrO   s      r   Údecode_base64_to_imagerf   ¿   s‡   € Ü$×8Ò8¸ÓB€MÜ
�)‰)�.‰.œ¤×!1Ò!1°-Ó!@ÓAÓ
B€Cð
Ü”8Ð-×.Ñ.Ü×)Ò)¨#Ó.ˆCð ‰?Ðˆ?Ø€Jøô ó 
ÜØ>Øö	
ð
ús   Á+B ÂBÂBc                óD   • [        U 5      n[        R                  " U5      $ ©N)rf   r   Úasarray)rd   rO   s     r   Údecode_base64_to_image_arrayrj   Î   s   € Ü
  Ó
*€CÜ�:Š:�c‹?Ðr!   c                ó0   • [        U 5      n[        X1U5      $ rh   )rf   r4   )rd   r&   r(   rO   s       r   Údecode_base64_to_filerl   Ó   s   € Ü
  Ó
*€CÜ�c fÓ-Ð-r!   c           	     óZ  • [        5        n[        R                  R                  [        R
                  " U [        R                  SS95      nUR                  US5        UR                  5       nS S S 5        [        [        R                  " W5      S5      nSU-   $ ! , (       d  f       N3= f)NF)Ú
force_copyÚJPEGúutf-8údata:image/jpeg;base64,)r   r   r   r   r   Ú_convertr   Úuint8ÚsaveÚgetvaluer   r_   Ú	b64encode)Úimage_arrayÚoutput_bytesÚ	pil_imageÚ
bytes_dataÚ
base64_strs        r   Úencode_image_array_to_base64r|   Ø   s‚   € Ü	Œ�lÜ—I‘I×'Ñ'Ü×%Ò% k´2·8±8ÈÑNó
ˆ	ð 	�‰�| VÔ,Ø!×*Ñ*Ó,ˆ
÷ 
ô ”V×%Ò% jÓ1°7Ó;€JØ$ zÑ1Ð1÷ 
�ús   ‹A$BÂ
B*c                óØ   • [        5        nU R                  US5        UR                  5       nS S S 5        [        [        R
                  " W5      S5      nSU-   $ ! , (       d  f       N3= f)Nro   rp   rq   )r   rt   ru   r   r_   rv   )Úimagerx   rz   r{   s       r   Úencode_image_to_base64r   ã   sV   € Ü	Œ�lØ�
‰
�< Ô(Ø!×*Ñ*Ó,ˆ
÷ 
ô ”V×%Ò% jÓ1°7Ó;€JØ$ zÑ1Ð1÷	 
�ús   ‹#AÁ
A)c                óè   • [        [        U 5      5      n[        U S5       nUR                  5       nS S S 5        [        [        R
                  " W5      S5      nSU S3U-   $ ! , (       d  f       N7= f)NÚrbrp   údata:z;base64,)r
   r   r   Úreadr_   rv   )Ú
image_fileÚ	mime_typeÚfrz   r{   s        r   Úencode_image_file_to_base64r‡   ë   s`   € ÜœS ›_Ó-€IÜ	ˆj˜$Ô	 1Ø—V‘V“Xˆ
÷ 
 ä”V×%Ò% jÓ1°7Ó;€JØ�9�+˜XÐ&¨Ñ3Ð3÷ 
 Õ	ús   ¡A#Á#
A1c                ó*  • [        U 5      n [        U 5      (       aA  [        R                  " [        R
                  U 5      nUR                  5         UR                  $ [        U 5       nUR                  5       nSSS5        U$ ! , (       d  f       W$ = f)z¼
Provided a path or URL to an SVG file, return the SVG content as a string.
Parameters:
    image_file: Local file path or URL to an SVG file
Returns:
    str: The SVG content as a string
N)
r   r   Úclient_utilsÚsynchronize_asyncr   Úasync_ssrf_protected_getÚraise_for_statusÚtextr   rƒ   )r„   ÚresponseÚfileÚsvg_contents       r   Úextract_svg_contentr‘   ó   sz   € ô �Z“€JÜ˜
×#Ñ#Ü×1Ò1Ü×5Ñ5°zó
ˆð 	×!Ñ!Ô#Ø�}‰}Ðä�*Ô ØŸ)™)›+ˆK÷ àÐ÷ ÔàÐús   Á(BÂ
BÚpreprocess_format_imagec                óø  • U c  U $ U R                   (       ar  U R                   R                  S5      (       aR  US:X  a  [        U R                   5      $ US:X  a  [        U R                   5      $ US:X  a  [	        U R                   X5      $ U R
                  c  [        S5      e[        U R
                  5      nU R                  (       aF  [        U R                  5      nUR                  nUR                  R                  SS5      nUS;   a  S	nOS
nSnUR                  5       S:X  a  US:X  a  [        U5      $ [        S5      e[        R                   R#                  U5      n	US:X  a  US U	R$                  4;   a  [        U5      $ U	R'                  5       n
U
R)                  SS5      S:w  a,  [+        [,        S5      (       a   [,        R.                  " U	5      n	UR                  5       S:w  aK  U	bH  [2        R6                  " 5          [2        R8                  " S5        Ub  U	R;                  U5      n	S S S 5        [=        U	UUUUS9$ ! [0         a    [2        R4                  " SU S35         N’f = f! , (       d  f       NE= f)Nr‚   r#   r$   r%   zImage path is None.Ú.Ú )ÚjpgÚjpegr—   r~   ÚwebpÚsvgz9SVG files are not supported as input images for this app.i  é   r]   zFailed to transpose image z based on EXIF data.ÚgifÚignore)r   r&   r'   r(   )ÚurlÚ
startswithrf   rj   rl   r.   r   r   Ú	orig_nameÚstemÚsuffixÚreplaceÚlowerr   r   r   r   r   r<   ÚgetexifÚgetra   r   r]   rb   ÚwarningsÚwarnÚcatch_warningsÚsimplefilterr=   r/   )Úpayloadr&   r(   Ú
image_moder   Ú	file_pathÚpr'   r¡   r-   Úexifs              r   Úpreprocess_imager¯     s  € ð �ØˆØ‡{‡{�w—{‘{×-Ñ-¨g×6Ñ6Ø�5‹=Ü)¨'¯+©+Ó6Ð6Ø�W‹_Ü/°·±Ó<Ð<Ø�ZÓÜ(¨¯©°iÓHÐHØ‡|�|ÑÜÐ.Ó/Ð/Ü�W—\‘\Ó"€IØ××Ü�×"Ñ"Ó#ˆØ�v‰vˆØ—‘×!Ñ! # rÓ*ˆØ�_Ó$ØˆFøàˆØˆà‡|�|ƒ~˜ÓØ�:ÓÜ�y“>Ð!ÜÐOÓPÐPä	�‰�‰˜	Ó	"€BØˆzÓ˜z¨d°B·G±G¨_Ó<Ü�9‹~Ðà�:‰:‹<€Dà‡x�x��QÓ˜1Ó¤¬Ð3C×!DÑ!Dð	XÜ×(Ò(¨Ó,ˆBð ‡|�|ƒ~˜Ó 2¡>Ü×$Ò$Õ&Ü×!Ò! (Ô+ØÑ%Ø—Z‘Z 
Ó+�÷ 'ô
 Ø
ØØØØñð øô ó 	XÜ�MŠMÐ6°y°kÐAUÐVÖWð	Xú÷ 'Õ&ús   Æ?I È+I+É$I(É'I(É+
I9c                óÔ  • SSK Jn  U c  g[        U [        5      (       ac  U R	                  5       R                  S5      (       a?  [        U 5      nUb  U" S5        [        [        U 5      R                  S[        U5       3S9$ U(       a  UR                  b  [        X5      n [        XUS9n[        U5      R                  5       (       a  [        U5      R                  OSn[        XgS	9$ )
a  
Parameters:
    value: Expects a `numpy.array`, `PIL.Image`, or `str` or `pathlib.Path` filepath to an image which is displayed.
    watermark: An optional `WatermarkOptions` instance to apply a watermark to the image.
Returns:
    Returns the image as a `FileData` object.
r   )ÚWarningNz.svgzUWatermarking for SVG images is currently not supported. No watermark will be applied.zdata:image/svg+xml,)rŸ   r�   r1   )r.   rŸ   )Úgradior±   r   r   r£   Úendswithr‘   r   r   r'   r   r:   rI   r4   Úexists)Úvaluer&   r(   r:   r±   r�   ÚsavedrŸ   s           r   Úpostprocess_imager·   H  sÍ   € õ à�}ØÜ�%œ×Ñ %§+¡+£-×"8Ñ"8¸×"@Ñ"@Ü)¨%Ó0ˆØÑ ÙØgôô Ü˜5“k×&Ñ&Ø%¤e¨KÓ&8Ð%9Ð:ñ
ð 	
ö �Y×(Ñ(Ñ4Ü˜eÓ/ˆÜ�u¸&ÑA€EÜ$(¨£K×$6Ñ$6×$8Ñ$8”�U“× Ò ¸d€IÜ˜%Ñ5Ð5r!   )r   ú)np.ndarray | PIL.Image.Image | str | PathÚreturnúPIL.Image.Image)r~   r˜   )r-   zPIL.Image.Image | Noner   ú#Literal['numpy', 'pil', 'filepath']r&   r   r'   r   r(   r   r¹   ú)np.ndarray | PIL.Image.Image | str | None)r˜   )r3   r¸   r&   r   r(   r   )r?   r¸   r@   r   r¹   rº   )rO   rº   rP   rM   rQ   rM   )rd   r   r¹   rº   )rd   r   r¹   ú
np.ndarray)rd   r   r&   r   r(   r   r¹   r   )rw   r½   r¹   r   )r~   rº   r¹   r   )r„   z
str | Pathr¹   r   )rª   úImageData | Noner&   r   r(   r   r«   zULiteral['1', 'L', 'P', 'RGB', 'RGBA', 'CMYK', 'YCbCr', 'LAB', 'HSV', 'I', 'F'] | Noner   r»   r¹   r¼   rh   )
rµ   z0np.ndarray | PIL.Image.Image | str | Path | Noner&   r   r(   r   r:   zWatermarkOptions | Noner¹   r¾   )2Ú
__future__r   r_   r¦   Úior   Úpathlibr   Útypingr   r   Úurllib.parser   r$   r   Ú	PIL.Imager   Úgradio_clientr	   r‰   Úgradio_client.utilsr
   r   r   r²   r   Úgradio.components.image_editorr   Úgradio.data_classesr   Úgradio.exceptionsr   Úgradio.profilingr   r   Úinitr    r/   r4   rI   r[   rf   rj   rl   r|   r   r‡   r‘   r¯   r·   © r!   r   Ú<module>rÍ      sˆ  ðÝ "ã Û Ý Ý ß  Ý ã Û Ý /ß >Ý å #Ý ;Ý )Ý #Ý (à ‡	�	‡�Ô ôð6 Øð!
Øð!
à
-ð!
ð ð!
ð ð	!
ð
 ð!
ð /õ!
ðJ QWðØ0ðØ=@ðØJMõð:4Ø7ð4à&ð4ð ô4ônô.ôö
.ô
2ô2ô4ôñ* Ð&Ó'ð<Øð<àð<ð ð<ðð	<ð .ð<ð /ó<ó (ð<ðF *.ð	6Ø;ð6àð6ð ð6ð 'ð	6ð
 ö6r!   