
    h4                     |    S SK r S SKrS SKJ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JrJr  S	r " S
 S5      rg)    N)BytesIO)Pathunpack)TupleUnion)Url   )UndefinedImageSizeUnsupportedImageFormatg      X@c            	       h   \ rS rSrSrS\\\\4   4S jr	S r
\S\4S j5       r\S\4S j5       r\S\4S	 j5       r\S\4S
 j5       r\S\4S j5       r\S\\S4   4S j5       r\R&                  S\4S j5       r\S\4S j5       r\R&                  S\4S j5       r\S\\S4   4S j5       r\R&                  S\4S j5       rSS jrS rS\S\\\\\\4   4S jrS\S\\\\\\4   4S jrS\S\\\\\\4   4S jrS\S\\\\4   4S jrS\S\\\\\\4   4S jr S\S\\\\\\4   4S jr!Sr"g)Image   z7
A class to represent an image in an Excel worksheet.

sourcec                 4   [        U[        [        45      (       a2  Xl        SU l        [
        R                  R                  U5      U l        O5[        U[        5      (       a  SU l        Xl        SU l        O[        S5      eSU l        SU l        SU l        SU l        SU l        SU l        SU l        SU l        SU l        SU l        SU l        SU l        SU l        SU l        SU l        [4        U l        [4        U l        SU l        U R=                  5         g)	z
Initialize an Image instance.

Args:
    source (Union[str, Path, BytesIO]): The filename, Path or BytesIO
    object of the image.
N z4Source must be a filename (str) or a BytesIO object.r   g      ?   F        )
isinstancestrr   filename
image_dataospathbasename
image_namer   
ValueError_row_col	_x_offset	_y_offset_x_scale_y_scale_url_anchor_description_decorative_header_position_ref_id_image_extension_width_heightDEFAULT_DPI_x_dpi_y_dpi_digest_get_image_properties)selfr   s     cC:\Users\julio\OneDrive\Documentos\Trabajo\Ideas Frescas\venv\Lib\site-packages\xlsxwriter/image.py__init__Image.__init__   s     fsDk**"M"DO gg..v6DO((DM$O DOSTT		""&*	.2!&26)- &( !(()-""$    c                     SU R                   < SU R                  < SU R                  < SU R                   SU R                   SU R
                   SU R                   S3$ )	zN
Return a string representation of the main properties of the Image
instance.
zImage:
    filename   = z
    image_name = z
    image_type = z
    width      = z
    height     = z
    x_dpi      = z
    y_dpi      = 
)r   r   
image_typer+   r,   r.   r/   r2   s    r3   __repr__Image.__repr__H   ss      $0 1  $2 3  $2 3  $} -  $~ .  $} -  $}B0		
r6   returnc                 6    U R                   R                  5       $ )z)Get the image type (e.g., 'PNG', 'JPEG').)r*   upperr:   s    r3   r9   Image.image_typeX   s     $$**,,r6   c                     U R                   $ )zGet the width of the image.)r+   r:   s    r3   widthImage.width]        {{r6   c                     U R                   $ )zGet the height of the image.)r,   r:   s    r3   heightImage.heightb   s     ||r6   c                     U R                   $ )z$Get the horizontal DPI of the image.)r.   r:   s    r3   x_dpiImage.x_dpig   rD   r6   c                     U R                   $ )z"Get the vertical DPI of the image.)r/   r:   s    r3   y_dpiImage.y_dpil   rD   r6   Nc                     U R                   $ )z*Get the description/alt-text of the image.r&   r:   s    r3   descriptionImage.descriptionq   s        r6   valuec                      U(       a  Xl         gg)z*Set the description/alt-text of the image.NrO   r2   rR   s     r3   rP   rQ   v   s      % r6   c                     U R                   $ )z$Get whether the image is decorative.r'   r:   s    r3   
decorativeImage.decorative|   s     r6   c                     Xl         g)z$Set whether the image is decorative.NrV   rT   s     r3   rW   rX      s
     !r6   c                     U R                   $ )zGet the image url.r$   r:   s    r3   url	Image.url   s     yyr6   c                      U(       a  Xl         gg)zSet the image url.Nr[   rT   s     r3   r\   r]      s     I r6   c                    Uc  gU R                   (       dF  [        R                  " U5      U l         U R                   (       a  U R                   R                  5         UR	                  SU R
                  5      U l        UR	                  SU R                  5      U l        UR	                  SU R                  5      U l        UR	                  SU R                  5      U l        UR	                  SU R                  5      U l	        UR	                  SU R                  5      U l
        UR	                  SU R                  5      U l        UR	                  S	U R                  5      U l        UR	                  S
U R
                  5      U l        g)zI
This handles the additional optional parameters to ``insert_button()``.
Nobject_positionx_scaley_scalex_offsety_offsetrW   r   rP   positioning)r$   r	   from_options_set_object_linkgetr%   r"   r#   r    r!   r'   r   r&   )r2   optionss     r3   _set_user_optionsImage._set_user_options   s    ?yy((1DIyy		**,{{#4dllCIt}}=It}}= Z@ Z@";;|T5E5EF!++lDOOD#KKt7H7HI {{=$,,?r6   c                 l   SnSn[         n[         nU R                  (       a  U R                  R                  5       nO/[        U R                  S5       nUR                  5       nS S S 5        [        R                  " W5      R                  5       n[        SUSS 5      S   n[        SUS S 5      S   n	[        S	US S 5      S   n
[        S
US S 5      S   n[        S
USS 5      S   n[        SUS S 5      S   nUS:X  a  U R                  U5      u  ppnOU	S:X  a  U R                  U5      u  ppnOU
S:X  a  U R                  U5      u  pnOrUS:X  a  U R                  U5      u  ppnOVUS:X  a  US:X  a  U R                  U5      u  ppnO4US:X  a  U R                  U5      u  ppnO[!        U R                   S35      eU(       a  U(       d  [#        U R                   S35      eUS:X  a  [         nUS:X  a  [         nXl        X l        Xl        X0l        X@l        Xpl        g ! , (       d  f       GN= f)Nr   rb3sr
      r   >Hr   2s4s(   ,   <Ls   PNGi  s   BMl   M5 s    EMFs   GIF8z+: Unknown or unsupported image file format.z#: no size data found in image file.)r-   r   getvalueopenr   readhashlibsha256	hexdigestr   _process_png_process_jpg_process_bmp_process_wmf_process_emf_process_gifr   r   r*   r+   r,   r.   r/   r0   )r2   rF   rB   rI   rL   datafhdigest
png_marker
jpg_marker
bmp_marker
gif_marker
emf_markeremf_marker1r9   s                  r3   r1   Image._get_image_properties   s9   ????++-D dmmT*bwwy + %//1 D$q),Q/
D$r(+A.
D$r(+A.
D$r(+A.
T42;/3
T48,Q/8<8I8I$8O5Zu6!8<8I8I$8O5Zu5 *.*;*;D*A'ZJ&8<8I8I$8O5ZuA*"78<8I8I$8O5Zu7"8<8I8I$8O5Zu )==/!LM 
 U$==/!DE 
 A:EA:E *m +*s   H$$
H3r   c                 2   Sn[        U5      nSnSnSn[        n[        nU(       d  X#:  a  [        SXS-   US-    5      S   n	[        SXS-   US-    5      S   n
U
S:X  a.  [        SXS-   US	-    5      S   n[        SXS	-   US
-    5      S   nU
S:X  aa  [        SXS-   US	-    5      S   n[        SXS	-   US
-    5      S   n[        SXS
-   US-    5      S   nUS:X  a  US:  a  US:  a
  US-  nUS-  nU
S:X  a  SnM  X)-   S	-   nU(       d  X#:  a  M  SXVXx4$ )N   Fr   z>Ir   ro   rr   s   IHDR      s   pHYsb   r
   g
F%u?s   IENDTpnglenr-   r   )r2   r   offsetdata_length
end_markerrB   rF   rI   rL   lengthmarker	x_density	y_densityunitss                 r3   r|   Image._process_png   sw   
 $i
 !5D$zFQJ"?@CFD$zFQJ"?@CF  tT1*v{%CDQGdB;"&EFqI  "4qj6B;)GHK	"4rkFRK)HI!L	sD"v{$CDQGA:)a-IM%.E%.E !
_r)F/ !52 eU11r6   c                    Sn[        U5      nSnSnSn[        n[        nU(       Gd  X#:  Ga  [        SXS-   US-    5      S   n	[        SXS-   US-    5      S   n
U	S-  S:X  a@  U	S	:w  a:  U	S
:w  a4  U	S:w  a.  [        SXS-   US-    5      S   n[        SXS-   US-    5      S   nU	S:X  aw  [        SXS-   US-    5      S   n[        SXS-   US-    5      S   n[        SXS-   US-    5      S   nUS:X  a  UnUnUS:X  a
  US-  nUS-  nUS:X  a  [        nUS:X  a  [        nU	S:X  a  SnGM  X*-   S-   nU(       d  X#:  a  GM  SXVXx4$ )Nr   Fr   rp   r   ro   i  i  i  i  i        	   i  r      r      r   r
   gRQ@i  Tjpegr   )r2   r   r   r   r   rB   rF   rI   rL   r   r   r   r   r   s                 r3   r}   Image._process_jpg  s   $i
 !5D$zFQJ"?@CFD$zFQJ"?@CF
 &V+f$f$f$dA:
&CDQGtT1*vz%BCAF sD"v{$CDQG"4rkFRK)HI!L	"4rkFRK)HI!L	A:%E%EA:%,E%,E A:'EA:'E!
_q(FO !5R ue22r6   c                 l    [         n[         n[        SUSS 5      S   n[        SUSS 5      S   nSXEX#4$ )N<h   r   r   
   gif)r-   r   )r2   r   rI   rL   rB   rF   s         r3   r   Image._process_gifM  sG    tT!AY'*d1Rj)!,eU11r6   c                 R    [        SUSS 5      S   n[        SUSS 5      S   nSX#4$ )Nru         r      bmpr   )r2   r   rB   rF   s       r3   r~   Image._process_bmpW  s;    tT"R[)!,d2bk*1-e##r6   c                 $   [         n[         n[        SUSS 5      S   n[        SUSS 5      S   n[        SUSS 5      S   n[        SUSS 5      S   n[        SUSS	 5      S   n[        Xd-
  U-  5      U-  n	[        Xu-
  U-  5      U-  n
S
XX#4$ )Nr   r   r   r   r   r   r   z<Hr   wmf)r-   r   float)r2   r   rI   rL   x1y1x2y2inchrB   rF   s              r3   r   Image._process_wmf]  s     D$q)$Q'D$q*%a(D$r"+&q)D$r"+&q) dDBK(+ rw%'(4/5()D0eU11r6   c                    [        SUSS 5      S   n[        SUSS 5      S   n[        SUSS 5      S   n[        SUSS 5      S   nXB-
  nXS-
  n[        SUSS 5      S   n[        SUSS	 5      S   n	[        SUS	S
 5      S   n
[        SUS
S 5      S   nSX-
  -  nSX-
  -  nUS-  U-  nUS-  U-  nUS-  nUS-  nSXgX4$ )Nz<lr   r   r   r      r          $   rs   g{Gz?gffffff9@r
   emfr   )r2   r   bound_x1bound_y1bound_x2bound_y2rB   rF   frame_x1frame_y1frame_x2frame_y2width_mm	height_mmrI   rL   s                   r3   r   Image._process_emfq  s+    $Qr
+A.$R,Q/$R,Q/$R,Q/ #$ $R,Q/$R,Q/$R,Q/$R,Q/ 8./H/0	 x'	) 	
!eU11r6   )r%   r   r'   r&   r0   r(   r,   r*   r)   r   r$   r+   r.   r    r"   r/   r!   r#   r   r   r   )N)#__name__
__module____qualname____firstlineno____doc__r   r   r   r   r4   r;   propertyr9   r   rB   rF   rI   rL   rP   setterboolrW   r	   r\   rj   r1   bytesr   r|   r}   r   r~   r   r   __static_attributes__ r6   r3   r   r      sQ   
(%uS$%78 (%T
  -C - - u      u   u   !U39- ! ! & & &
  D     ! ! ! U39%   	ZZ  
@0BH(2(2 
sE5%.	/(2T43 435eUE51P+Q 43l2 25eUE51P+Q 2$ $5eU1B+C $2 25eUE51P+Q 2( 2  25eUE51P+Q  2r6   r   )ry   r   ior   pathlibr   structr   typingr   r   xlsxwriter.urlr	   
exceptionsr   r   r-   r   r   r6   r3   <module>r      s0     	      By2 y2r6   