
    QHh4                     p    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mZmZ dZ G d	 d
      Zy)    N)BytesIOunpack)TupleUnion)Url   )UndefinedImageSizeUnsupportedImageFormatg      X@c            	       8   e Zd ZdZdeeef   fdZ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fd       Ze	defd       Zej"                  defd       Ze	deedf   fd       Zej"                  defd       ZddZ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.

    sourcec                    t        |t              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| _        t2        | _        t2        | _        d| _        | j;                          y)	z
        Initialize an Image instance.

        Args:
            source (Union[str, BytesIO]): The filename or BytesIO object of the image.
        N z4Source must be a filename (str) or a BytesIO object.r   g      ?   F        )
isinstancestr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     v/var/www/html/SchoolMeal/SchoolMeal/pds_admin_SchoolMeal/Backend/venv/lib/python3.12/site-packages/xlsxwriter/image.py__init__zImage.__init__   s     fc""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-   r0   s    r1   __repr__zImage.__repr__F   ss      $0 1  $2 3  $2 3  $} -  $~ .  $} -  $}B0		
r3   returnc                 6    | j                   j                         S )z)Get the image type (e.g., 'PNG', 'JPEG').)r(   upperr7   s    r1   r6   zImage.image_typeV   s     $$**,,r3   c                     | j                   S )zGet the width of the image.)r)   r7   s    r1   widthzImage.width[        {{r3   c                     | j                   S )zGet the height of the image.)r*   r7   s    r1   heightzImage.height`   s     ||r3   c                     | j                   S )z$Get the horizontal DPI of the image.)r,   r7   s    r1   x_dpizImage.x_dpie   r>   r3   c                     | j                   S )z"Get the vertical DPI of the image.)r-   r7   s    r1   y_dpizImage.y_dpij   r>   r3   Nc                     | j                   S )z*Get the description/alt-text of the image.r$   r7   s    r1   descriptionzImage.descriptiono   s        r3   valuec                     |r|| _         yy)z*Set the description/alt-text of the image.NrF   r0   rH   s     r1   rG   zImage.descriptiont   s      %D r3   c                     | j                   S )z$Get whether the image is decorative.r%   r7   s    r1   
decorativezImage.decorativez   s     r3   c                     || _         y)z$Set whether the image is decorative.NrL   rJ   s     r1   rM   zImage.decorative   s     !r3   c                     | j                   S )zGet the image url.r"   r7   s    r1   urlz	Image.url   s     yyr3   c                     |r|| _         yy)zSet the image url.NrP   rJ   s     r1   rQ   z	Image.url   s     DI r3   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_offsetrM   r   rG   positioning)r"   r   from_options_set_object_linkgetr#   r    r!   r   r   r%   r   r$   )r0   optionss     r1   _set_user_optionszImage._set_user_options   s    ?yy((1DIyy		**,{{#4dllCIt}}=It}}= Z@ Z@";;|T5E5EF!++lDOOD#KKt7H7HI {{=$,,?r3   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-   r.   )r0   r@   r=   rB   rD   datafhdigest
png_marker
jpg_marker
bmp_marker
gif_marker
emf_markeremf_marker1r6   s                  r1   r/   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&ru   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   rb   re   s   IHDR      s   pHYsb   r	   g
F%u?s   IENDTpnglenr+   r   )r0   ru   offsetdata_length
end_markerr=   r@   rB   rD   lengthmarker	x_density	y_densityunitss                 r1   ro   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1r3   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   rc   r   rb   i  i  i  i  i        	   i  r      r      r   r	   gRQ@i  Tjpegr   )r0   ru   r   r   r   r=   r@   rB   rD   r   r   r   r   r   s                 r1   rp   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2r3   c                 p    t         }t         }t        d|dd       d   }t        d|dd       d   }d||||fS )N<h   r   r   
   gif)r+   r   )r0   ru   rB   rD   r=   r@   s         r1   rt   zImage._process_gifK  sK    tT!AY'*d1Rj)!,eVUE11r3   c                 T    t        d|dd       d   }t        d|dd       d   }d||fS )Nrh         r      bmpr   )r0   ru   r=   r@   s       r1   rq   zImage._process_bmpU  s=    tT"R[)!,d2bk*1-eV##r3   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)r0   ru   rB   rD   x1y1x2y2inchr=   r@   s              r1   rr   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1r3   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                $   rf   g{Gz?gffffff9@r	   emfr   )r0   ru   bound_x1bound_y1bound_x2bound_y2r=   r@   frame_x1frame_y1frame_x2frame_y2width_mm	height_mmrB   rD   s                   r1   rs   zImage._process_emfo  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1r3   )N) __name__
__module____qualname____doc__r   r   r   r2   r8   propertyr6   r   r=   r@   rB   rD   rG   setterboolrM   r   rQ   r^   r/   bytesr   ro   rp   rt   rq   rr   rs    r3   r1   r   r      sN   
'%uS'\2 '%R
  -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  2r3   r   )rl   r   ior   structr   typingr   r   xlsxwriter.urlr   
exceptionsr
   r   r+   r   r   r3   r1   <module>r      s-     	     Bx2 x2r3   