
    	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dS )    N)BytesIO)Pathunpack)TupleUnion)Url   )UndefinedImageSizeUnsupportedImageFormatg      X@c            	          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 dS )Imagez?
    A class to represent an image in an Excel worksheet.

    sourcereturnNc                 P   t          |t          t          f          r3|| _        d| _        t
          j                            |          | _        n:t          |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| _        |                                  dS )	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     H/srv/django_bis/venv311/lib/python3.11/site-packages/xlsxwriter/image.py__init__zImage.__init__   s    fsDk** 		U"DM"DO g..v66DOO(( 	UDM$DO DOOSTTT		""&*	.2!&26)- &( !(()-""$$$$$    c                 x    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   s    0 $0 0 $0 0 !%0 0 !%	0 0
 !%0 0 !%0 0 !%0 0 0		
r5   c                 4    | 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	|| _         dS dS )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                     || _         dS )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     yr5   c                     |r	|| _         dS dS )zSet the image url.NrQ   rK   s     r3   rR   z	Image.url   s!      	DIII	 	r5   c                    |dS | j         s9t          j        |          | _         | j         r| j                                          |                    d| j                  | _        |                    d| j                  | _        |                    d| j                  | _        |                    d| j                  | _        |                    d| j	                  | _	        |                    d| j
                  | _
        |                    d| j                  | _        |                    d	| j                  | _        |                    d
| j                  | _        dS )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"    ?Fy 	-(11DIy -	**,,,{{#4dlCCIt}==It}== Z@@ Z@@";;|T5EFF!++lDODD#KKt7HII {{=$,??r5   c                 .   d}d}t           }t           }| j        r| j                                        }nAt          | j        d          5 }|                                }d d d            n# 1 swxY w Y   t          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| 
                    |          \  }}}}}n|	dk    r|                     |          \  }}}}}n|
dk    r|                     |          \  }}}n|dk    r|                     |          \  }}}}}na|dk    r"|dk    r|                     |          \  }}}}}n9|dk    r|                     |          \  }}}}}nt!          | j         d          |r|st#          | j         d          |dk    rt           }|dk    rt           }|| _        || _        || _        || _        || _        || _        d S )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   s   ? 	!?++--DD dmT** !bwwyy! ! ! ! ! ! ! ! ! ! ! ! ! ! ! %%//11 D$qs),,Q/
D$rr(++A.
D$rr(++A.
D$rr(++A.
T42;//3
T48,,Q/8<8I8I$8O8O5Zuu6!!8<8I8I$8O8O5Zuu5  *.*;*;D*A*A'ZJ&&8<8I8I$8O8O5ZuuA*"7"78<8I8I$8O8O5Zuu7""8<8I8I$8O8O5Zuu )=MMM  
  	U 	$=EEE  
 A::EA::E *s   	A**A.1A.rv   c                    d}t          |          }d}d}d}t          }t          }|sF||k     r?t          d||dz   |dz                      d         }	t          d||dz   |dz                      d         }
|
dk    rHt          d||dz   |d	z                      d         }t          d||d	z   |d
z                      d         }|
dk    rt          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k    r
|dz  }|dz  }|
dk    rd}8||	z   d	z   }|s||k     ?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   
 $ii
  	*+!5!5D$vzFQJ'>"?@@CFD$vzFQJ'>"?@@CF   tT&1*v{*B%CDDQGd6B;"+D&EFFqI   "4fqj6B;.F)GHHK	"4frkFRK.G)HII!L	sD"v{)B$CDDQGA::)a--IMM%.E%.E  !
f_r)F/  	*+!5!52 eVUE11r5   c                 F   d}t          |          }d}d}d}t          }t          }|ss||k     rlt          d||dz   |dz                      d         }	t          d||dz   |dz                      d         }
|	dz  dk    rZ|	d	k    rT|	d
k    rN|	dk    rHt          d||dz   |dz                      d         }t          d||dz   |dz                      d         }|	dk    rt          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}e||
z   dz   }|s||k     ld||||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    $ii
  '	)+!5!5D$vzFQJ'>"?@@CFD$vzFQJ'>"?@@CF
 &V++f$$f$$f$$d6A:
+B&CDDQGtT&1*vz*A%BCCAF sD"v{)B$CDDQG"4frkFRK.G)HII!L	"4frkFRK.G)HII!L	A::%E%EA::%,E%,E A::'EA::'E!
f_q(FO  '	)+!5!5R ufeU22r5   c                     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  sU    tT!A#Y''*d1R4j))!,eVUE11r5   c                     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  sG    tT"R%[))!,d2b5k**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s)$$Q'D$qt*%%a(D$r"u+&&q)D$r"u+&&q) dDBK((+ rBw%'((4/R5())D0eVUE11r5   c                 X   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  s_    $QrT
++A.$RU,,Q/$RU,,Q/$RU,,Q/ 8#H$ $RU,,Q/$RU,,Q/$RU,,Q/$RU,,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      s        
(%uS$%78 (%T (% (% (% (%T
# 
 
 
 
  -C - - - X- u    X     X u    X u    X !U39- ! ! ! X! & & & & & &
  D       X  ! ! ! ! ! ! U39%    X 	Z     Z
@ @ @ @ @0B B B BH(2(2 
sE5%.	/(2 (2 (2 (2T43 435eUE51P+Q 43 43 43 43l2 25eUE51P+Q 2 2 2 2$ $5eU1B+C $ $ $ $2 25eUE51P+Q 2 2 2 2( 2  25eUE51P+Q  2  2  2  2  2  2r5   r   )rm   r   ior   pathlibr   structr   typingr   r   xlsxwriter.urlr	   
exceptionsr   r   r-   r   r   r5   r3   <module>r      s     				                                 B B B B B B B By2 y2 y2 y2 y2 y2 y2 y2 y2 y2r5   