
    8P[i.                       d dl mZ d dl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 d dlZd dlZd dlZd dlmZmZ d dlmZ d d	lmZ d d
lmZ d dlmZ d dlmZ ej<                  j?                          ddZ 	 	 d	 	 	 	 	 	 	 	 	 	 	 ddZ!	 d	 	 	 	 	 ddZ"	 	 	 	 	 	 d dZ#d!dZ$d"dZ%d#dZ&dd$dZ'd%dZ(d&dZ)d'dZ*d'dZ+	 	 	 	 	 	 	 	 	 	 	 	 d(dZ,	 d)	 	 	 	 	 	 	 	 	 d*dZ-y)+    )annotationsN)BytesIO)Path)Literalcast)quote)get_mimetypeis_http_url_like)ImageOps)processing_utils)WatermarkOptions)	ImageData)Errorc                v   t        | t        j                        r!t        j                  j                  |       }|S t        | t        t        f      r!t        j                  j                  |       }|S t        | t        j                  j                        r| }|S t        dt        t        |             z         )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     `/var/www/html/chatbot/Makanify-Chatbot-2/venv/lib/python3.12/site-packages/gradio/image_utils.py
open_imager      s     (BJJ'99&&x0 O 
HsDk	*99>>(+ O 
Hciioo	. O	 s$x.!"
 	
    c                    | | S |dk(  r| S |dk(  rt        j                  |       S |dk(  r	 t        j                  | |||      }|S t        dt        |      z   dz         # t        t
        f$ r t        j                  | ||d      }Y |S w xY w)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-   /   s     
z	u}		xx|			#55id6D $iAB
 	
 *% 	#55#	D 	s   A! !(BBc                   t        | t        j                        rt        j                  | ||      }|S t        | t
        j                  j                        r	 t        j                  | ||      }|S t        | t              rt        |       }|S t        | t              r| }|S t        dt        t        |             z         # t        t        f$ r t        j                  | |d      }Y |S w xY w)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_imager2   S   s     !RZZ 776
, K' 
Asyy	'	#55YvD" K 
At	1v K 
As	 K	 Ds4PQ7|S
 	
 *% 	#55YuD K	s   C 'C0/C0c                   t        |       } | j                  \  }}t        t        t        j                  t
        j                  j                  z  t        z  t        z  |j                              |_	        |j                  j                  \  }}t        |j                  t              rjd}|j                  dk(  r||}}nc|j                  dk(  r||z
  |z
  |}}nI|j                  dk(  r|||z
  |z
  }}n/|j                  dk(  r ||z
  |z
  ||z
  |z
  }}n|j                  \  }}dk  s||z   |kD  sdk  s||z   |kD  r||z
  dz
  }||z
  dz
  }||f}	| j                  }
| j                  d      } |j                  j                  d      |_	        | j                  |j                  |	|j                         | j                  |
      } | S )	aw  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xr1   watermark_positionorig_img_modes              r   add_watermarkrG   p   s    (#H&.mm#NO!+RZZ#))//)C/$68H8R8RS" )9(B(B(G(G%O%"++S1$$
2GqA&&+5!O3g=wqA&&-7O.>>HqA&&.807:"22W< A
  ((1 	
A/q5/1_,r1..3QMMM'H!1!;!;!C!CF!KNN""$6=M=W=W   .HOr   c           	         | j                   \  }}||z  }||z  |kD  r|}||z  }n|}||z  }||z
  dz  }||z
  dz  }	| j                  t        |      t        |	      t        ||z         t        |	|z         f      }
|
j                  ||f      }|S )N   )r7   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_scalerY      s    &)hh#NO%4'*==% #66
#
 #66Z'1,D[(A
-C((	TCHc$"34c#:K6LMK $$k<%@AKr   c                0   t        j                  |       }t        j                  j	                  t        t        j                  |                  }	 t        t        d      rt        j                  |      }|J |S # t        $ r t        d|       Y w xY w)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_encodedrM   s      r   decode_base64_to_imagerd      s    $88BM
))..!1!1-!@A
BC
8-.))#.C ??J  
>	

s   %A= =BBc                B    t        |       }t        j                  |      S N)rd   r   asarray)rb   rM   s     r   decode_base64_to_image_arrayrh      s    
 
*C::c?r   c                2    t        |       }t        |||      S rf   )rd   r2   )rb   r$   r&   rM   s       r   decode_base64_to_filerj      s    
 
*Cc9f--r   c                R   t               5 }t        j                  j                  t	        j
                  | t        j                  d            }|j                  |d       |j                         }d d d        t        t        j                        d      }d|z   S # 1 sw Y   -xY w)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_base64rz      s    	 -lII''%%k288N
	 	|V,!**,
- V%%j17;J$z11- -s   A&BB&c                    t               5 }| j                  |d       |j                         }d d d        t        t	        j
                        d      }d|z   S # 1 sw Y   -xY w)Nrm   rn   ro   )r   rr   rs   r   r]   rt   )imagerv   rx   ry   s       r   encode_image_to_base64r}      s^    	 -l

<(!**,
- V%%j17;J$z11	- -s   #AA#c                    t        t        |             }t        | d      5 }|j                         }d d d        t        t	        j
                        d      }d| d|z   S # 1 sw Y   1xY w)Nrbrn   data:z;base64,)r	   r   r   readr]   rt   )
image_file	mime_typefrx   ry   s        r   encode_image_file_to_base64r      sg    S_-I	j$	 1VVX
V%%j17;J9+X&33 s   A""A+c                    t        |       } t        |       r1t        j                  |       }|j	                          |j
                  S t        |       5 }|j                         }ddd       |S # 1 sw Y   S xY w)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
   httpxgetraise_for_statustextr   r   )r   responsefilesvg_contents       r   extract_svg_contentr      sj     ZJ
#99Z(!!#}}* 	&))+K	&	&s   A..A8c                   | | S | j                   rk| j                   j                  d      rP|dk(  rt        | j                         S |dk(  rt        | j                         S |dk(  rt	        | j                   ||      S | j
                  t        d      t        | j
                        }| j                  rDt        | j                        }|j                  }|j                  j                  dd      }|dv rd	}nd
}d}|j                         dk(  r|dk(  rt        |      S t        d      t        j                   j#                  |      }	|dk(  r|d |	j$                  fv rt        |      S |	j'                         }
|
j)                  dd      dk7  r&t+        t,        d      r	 t-        j.                  |	      }	|j                         dk7  rG|	Et3        j6                         5  t3        j8                  d       ||	j;                  |      }	d d d        t=        |	||||      S # t0        $ r t3        j4                  d| d       Y w xY w# 1 sw Y   AxY w)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
startswithrd   rh   rj   r,   r   r   	orig_namestemsuffixreplacelowerr   r   r   r   r   r:   getexifr   r_   r   r[   r`   warningswarncatch_warningssimplefilterr;   r-   )payloadr$   r&   
image_moder   	file_pathpr%   r   r+   exifs              r   preprocess_imager     s    {{w{{--g65=)'++66W_/<<Z(iHH||.//W\\"I""#vv!!#r*_$F||~:y>!OPP			"BzzdBGG_<9~::<DxxQ13C!D	X((,B ||~2>$$& 	,!!(+%ZZ
+	, 
   	XMM6ykAUVW	X	, 	,s   H )I"IIIc                   ddl m} | yt        | t              r`| j	                         j                  d      rAt        |       }| |d       t        t        |       j                  dt        |             S |r|j                  t        | |      } t        | ||      }t        |      j                         rt        |      j                  nd}t        ||	      S )
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   r/   )r,   r   )gradior   r   r   r   endswithr   r   r   r%   r   r8   rG   r2   exists)valuer$   r&   r8   r   r   savedr   s           r   postprocess_imager   C  s     }%%++-"8"8"@)%0 g 5k&&%eK&8%9:
 	
 Y((4eY/u	&AE$(K$6$6$8U  dI%9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   )r1   r   r$   r   r&   r   )r=   r   r>   r   r   r   )rM   r   rN   rK   rO   rK   )rb   r   r   r   )rb   r   r   
np.ndarray)rb   r   r$   r   r&   r   r   r   )ru   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   rf   )
r   z0np.ndarray | PIL.Image.Image | str | Path | Noner$   r   r&   r   r8   zWatermarkOptions | Noner   r   ).
__future__r   r]   r   ior   pathlibr   typingr   r   urllib.parser   r   r"   r   	PIL.Imager   gradio_client.utilsr	   r
   r   r   r   gradio.components.image_editorr   gradio.data_classesr   gradio.exceptionsr   r   initr   r-   r2   rG   rY   rd   rh   rj   rz   r}   r   r   r   r    r   r   <module>r      sp   "           >  # ; ) # 		 6 !
!

-!
 !
 	!

 !
 /!
J QW0=@JM:474&4 4n.
.
224&;;; ;	; .; /;D *.	6;66 6 '	6
 6r   