
    li*5                     |    d dl Z d dlZd dlm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mZmZ d	Z G d
 d      Zy)    N)BytesIO)Pathunpack)TupleUnion)Url   )UndefinedImageSizeUnsupportedImageFormatg      X@c            	       T   e Zd ZdZdeeeef   ddfdZdefdZ	e
defd       Ze
defd       Ze
defd	       Ze
defd
       Ze
defd       Ze
deedf   fd       Zej$                  deddfd       Ze
defd       Zej$                  deddfd       Ze
deedf   fd       Zej$                  deddfd       ZdddZddZdedeeeeeef   fdZdedeeeeeef   fdZdedeeeeeef   fdZdedeeeef   fdZdedeeeeeef   fdZdedeeeeeef   fdZ y)Imagez?
    A class to represent an image in an Excel worksheet.

    sourcereturnNc                 $   t        |t        t        f      r3|| _        d| _        t
        j                  j                  |      | _        n1t        |t              rd| _        || _        d| _        nt        d      d| _        d| _        d| _        d| _        d| _        d| _        d| _        d| _        d| _        d| _        d| _        d| _        d| _        d| _        d| _        t4        | _        t4        | _        d| _        | j=                          y)	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     N/var/www/html/eduruby.in/venv/lib/python3.12/site-packages/xlsxwriter/image.py__init__zImage.__init__   s     fsDk*"DM"DO gg..v6DO(DM$DO DOSTT		""&*	.2!&26)- &( !(()-""$    c                     d| j                   d| j                  d| j                  d| j                   d| j                   d| j
                   d| j                   dS )	zf
        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__zImage.__repr__H   ss      $0 1  $2 3  $2 3  $} -  $~ .  $} -  $}B0		
r5   c                 6    | j                   j                         S )z)Get the image type (e.g., 'PNG', 'JPEG').)r*   upperr9   s    r3   r8   zImage.image_typeX   s     $$**,,r5   c                     | j                   S )zGet the width of the image.)r+   r9   s    r3   widthzImage.width]        {{r5   c                     | j                   S )zGet the height of the image.)r,   r9   s    r3   heightzImage.heightb   s     ||r5   c                     | j                   S )z$Get the horizontal DPI of the image.)r.   r9   s    r3   x_dpizImage.x_dpig   r?   r5   c                     | j                   S )z"Get the vertical DPI of the image.)r/   r9   s    r3   y_dpizImage.y_dpil   r?   r5   c                     | j                   S )z*Get the description/alt-text of the image.r&   r9   s    r3   descriptionzImage.descriptionq   s        r5   valuec                     |r|| _         yy)z*Set the description/alt-text of the image.NrG   r2   rI   s     r3   rH   zImage.descriptionv   s      %D r5   c                     | j                   S )z$Get whether the image is decorative.r'   r9   s    r3   
decorativezImage.decorative|   s     r5   c                     || _         y)z$Set whether the image is decorative.NrM   rK   s     r3   rN   zImage.decorative   s     !r5   c                     | j                   S )zGet the image url.r$   r9   s    r3   urlz	Image.url   s     yyr5   c                     |r|| _         yy)zSet the image url.NrQ   rK   s     r3   rR   z	Image.url   s     DI r5   c                    |y| j                   s@t        j                  |      | _         | j                   r| j                   j                          |j	                  d| j
                        | _        |j	                  d| j                        | _        |j	                  d| j                        | _        |j	                  d| j                        | _        |j	                  d| j                        | _	        |j	                  d| j                        | _
        |j	                  d| j                        | _        |j	                  d	| j                        | _        |j	                  d
| j
                        | _        y)zY
        This handles the additional optional parameters to ``insert_button()``.
        Nobject_positionx_scaley_scalex_offsety_offsetrN   r   rH   positioning)r$   r	   from_options_set_object_linkgetr%   r"   r#   r    r!   r'   r   r&   )r2   optionss     r3   _set_user_optionszImage._set_user_options   s    ?yy((1DIyy		**,{{#4dllCIt}}=It}}= Z@ Z@";;|T5E5EF!++lDOOD#KKt7H7HI {{=$,,?r5   c                 R   d}d}t         }t         }| j                  r| j                  j                         }n/t        | j                  d      5 }|j                         }d d d        t        j                        j                         }t        d|dd       d   }t        d|d d       d   }	t        d	|d d       d   }
t        d
|d d       d   }t        d
|dd       d   }t        d|d d       d   }|dk(  r| j                  |      \  }}}}}n|	dk(  r| j                  |      \  }}}}}n|
dk(  r| j                  |      \  }}}nt|dk(  r| j                  |      \  }}}}}nW|dk(  r|dk(  r| j                  |      \  }}}}}n5|dk(  r| j                  |      \  }}}}}nt!        | j                   d      |r|st#        | j                   d      |dk(  rt         }|dk(  rt         }|| _        || _        || _        || _        || _        || _        y # 1 sw Y   xY w)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   rA   r>   rC   rE   datafhdigest
png_marker
jpg_marker
bmp_marker
gif_marker
emf_markeremf_marker1r8   s                  r3   r1   zImage._get_image_properties   sb   ????++-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H&rv   c                 "   d}t        |      }d}d}d}t        }t        }|s||k  rt        d||dz   |dz          d   }	t        d||dz   |dz          d   }
|
dk(  r0t        d||dz   |d	z          d   }t        d||d	z   |d
z          d   }|
dk(  rat        d||dz   |d	z          d   }t        d||d	z   |d
z          d   }t        d||d
z   |dz          d   }|dk(  r|dkD  r|dkD  r
|dz  }|dz  }|
dk(  rd}||	z   d	z   }|s||k  rd||||fS )N   Fr   z>Ir   rc   rf   s   IHDR      s   pHYsb   r
   g
F%u?s   IENDTpnglenr-   r   )r2   rv   offsetdata_length
end_markerr>   rA   rC   rE   lengthmarker	x_density	y_densityunitss                 r3   rp   zImage._process_png   s   
 $i
 +!5D$vzFQJ"?@CFD$vzFQJ"?@CF  tT&1*v{%CDQGd6B;"&EFqI  "4fqj6B;)GHK	"4frkFRK)HI!L	sD"v{$CDQGA:)a-IM%.E%.E !
f_r)F/ +!52 eVUE11r5   c                 x   d}t        |      }d}d}d}t        }t        }|s||k  rt        d||dz   |dz          d   }	t        d||dz   |dz          d   }
|	dz  dk(  r?|	d	k7  r:|	d
k7  r5|	dk7  r0t        d||dz   |dz          d   }t        d||dz   |dz          d   }|	dk(  rvt        d||dz   |dz          d   }t        d||dz   |dz          d   }t        d||dz   |dz          d   }|dk(  r|}|}|dk(  r
|dz  }|dz  }|dk(  rt        }|dk(  rt        }|	dk(  rd}||
z   dz   }|s||k  rd||||fS )Nr   Fr   rd   r   rc   i  i  i  i  i        	   i  r      r      r   r
   gRQ@i  Tjpegr   )r2   rv   r   r   r   r>   rA   rC   rE   r   r   r   r   r   s                 r3   rq   zImage._process_jpg  s   $i
 +!5D$vzFQJ"?@CFD$vzFQJ"?@CF
 &V+f$f$f$d6A:
&CDQGtT&1*vz%BCAF sD"v{$CDQG"4frkFRK)HI!L	"4frkFRK)HI!L	A:%E%EA:%,E%,E A:'EA:'E!
f_q(FO +!5R ufeU22r5   c                 p    t         }t         }t        d|dd       d   }t        d|dd       d   }d||||fS )N<h   r   r   
   gif)r-   r   )r2   rv   rC   rE   r>   rA   s         r3   ru   zImage._process_gifM  sK    tT!AY'*d1Rj)!,eVUE11r5   c                 T    t        d|dd       d   }t        d|dd       d   }d||fS )Nri         r      bmpr   )r2   rv   r>   rA   s       r3   rr   zImage._process_bmpW  s=    tT"R[)!,d2bk*1-eV##r5   c                 ,   t         }t         }t        d|dd       d   }t        d|dd       d   }t        d|dd       d   }t        d|dd       d   }t        d|dd	       d   }t        ||z
  |z        |z  }	t        ||z
  |z        |z  }
d
|	|
||fS )Nr   r   r   r   r   r   r   z<Hr   wmf)r-   r   float)r2   rv   rC   rE   x1y1x2y2inchr>   rA   s              r3   rs   zImage._process_wmf]  s     D$q)$Q'D$q*%a(D$r"+&q)D$r"+&q) dDBK(+ rBw%'(4/R5()D0eVUE11r5   c                    t        d|dd       d   }t        d|dd       d   }t        d|dd       d   }t        d|dd       d   }||z
  }||z
  }t        d|dd       d   }t        d|dd	       d   }	t        d|d	d
       d   }
t        d|d
d       d   }d|
|z
  z  }d||	z
  z  }|dz  |z  }|dz  |z  }|dz  }|dz  }d||||fS )Nz<lr   r   r   r                $   rg   g{Gz?gffffff9@r
   emfr   )r2   rv   bound_x1bound_y1bound_x2bound_y2r>   rA   frame_x1frame_y1frame_x2frame_y2width_mm	height_mmrC   rE   s                   r3   rt   zImage._process_emfq  s7    $Qr
+A.$R,Q/$R,Q/$R,Q/ 8#H$ $R,Q/$R,Q/$R,Q/$R,Q/ 8h./Hx/0	 x'	) 	
!eVUE11r5   )N)r   N)!__name__
__module____qualname____doc__r   r   r   r   r4   r:   propertyr8   r   r>   rA   rC   rE   rH   setterboolrN   r	   rR   r_   r1   bytesr   rp   rq   ru   rr   rs   rt    r5   r3   r   r      st   
(%uS$%78 (%T (%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  2r5   r   )rm   r   ior   pathlibr   structr   typingr   r   xlsxwriter.urlr	   
exceptionsr   r   r-   r   r   r5   r3   <module>r      s0     	      By2 y2r5   