o
    õÍjm0  ã                   @  s  d dl mZ d dlZd dlZd dlZd dlZd dlmZ ddlm	Z	m
Z
mZmZ e d¡Zer5ddlmZ dZd	Zd:dd„Zd;dd„Zd;dd„Zd;dd„Zd;dd„ZG dd„ dƒZG dd „ d e
j
ƒZd<d'd(„Zd=d,d-„Ze	 ejee¡ e	 ejd.¡ e	 eje¡ e	 ejd/¡ e d0kre!ej"ƒd1k re#d2ƒ e $¡  e%ej"d d3ƒ[Z&ee&ƒZ'e'j(d4 D ]Z)e) \Z*Z+Z,e'_)e' -d5e*› d6e+› d6e,› d7¡ q¯e	 %ej"d ¡Z.e. -d8¡ W d  ƒ n1 sáw   Y  ej/d9krøe 0d8¡ W d  ƒ dS W d  ƒ dS 1 sw   Y  dS dS )>é    )ÚannotationsN)ÚIOé   )ÚImageÚ	ImageFileÚPngImagePluginÚfeaturesZjpg_2000)ÚJpeg2KImagePlugins   icnsé   Úfobjú	IO[bytes]Úreturnútuple[bytes, int]c                 C  s   t  d|  t¡¡S )Nz>4sI)ÚstructÚunpackÚreadÚ
HEADERSIZE)r   © r   úT/var/www/html/Deteccion_Ine/venv/lib/python3.10/site-packages/PIL/IcnsImagePlugin.pyÚ
nextheader%   s   r   Ústart_lengthútuple[int, int]Úsizeútuple[int, int, int]údict[str, Image.Image]c                 C  sH   |\}}|   |¡ |  d¡}|dkrd}t|ƒ‚t| |d |d f|ƒS )Né   s       z'Unknown signature, expecting 0x00000000)Úseekr   ÚSyntaxErrorÚread_32)r   r   r   ÚstartÚlengthÚsigÚmsgr   r   r   Úread_32t)   s   

r#   c              
   C  sl  |\}}|   |¡ |d |d  |d |d  f}|d |d  }||d kr;|  |¡}t d||dddd¡}d|iS t d|d¡}tdƒD ]k}	g }
|}|dkr‹|  d¡}|sXn3|d }|d@ rr|d	 }|  d¡}|
 |g| ¡ n|d }|
 |  |¡¡ ||8 }|dkr‡n|dksP|dkr›d
t|ƒ› d}t	|ƒ‚t d|d 
|
¡dddd¡}|j |j|	¡ qFd|iS )zn
    Read a 32bit RGB icon resource.  Seems to be either uncompressed or
    an RLE packbits-like scheme.
    r   é   r   é   ÚRGBÚrawNé€   é}   zError reading channel [z left]ÚLó    )r   r   r   Ú
frombufferÚnewÚrangeÚextendÚappendÚreprr   ÚjoinÚimZputband)r   r   r   r   r    Ú
pixel_sizeÚsizesqZindatar3   Zband_ixÚdataZ	bytesleftÚbyteZbyte_intÚ	blocksizer"   Úbandr   r   r   r   6   sB   
 
è

òr   c              	   C  sf   |d }|   |¡ |d |d  |d |d  f}|d |d  }t d||  |¡dddd¡}d|iS )Nr   r$   r   r*   r'   ÚA)r   r   r,   r   )r   r   r   r   r4   r5   r9   r   r   r   Úread_mkb   s   
 r;   c           
      C  sÌ   |\}}|   |¡ |  d¡}| d¡r'|   |¡ t | ¡}t |j¡ d|iS | d¡s0|dkr`ts8d}t	|ƒ‚|   |¡ |  |¡}t
 |¡}	t |	¡}t |j¡ |jdkr\| d¡}d|iS d}t	|ƒ‚)Né   s   ‰PNG

ÚRGBA)s   ÿOÿQs   
‡
s      jP  
‡
zQUnsupported icon subimage format (rebuild PIL with JPEG 2000 support to fix this)z Unsupported icon subimage format)r   r   Ú
startswithr   ZPngImageFiler   Z_decompression_bomb_checkr   Úenable_jpeg2kÚ
ValueErrorÚioÚBytesIOr	   ZJpeg2KImageFileÚmodeÚconvert)
r   r   r   r   r    r!   r3   r"   Z
jp2kstreamÚfr   r   r   Úread_png_or_jpeg2000n   s2   




ÿÿ





rF   c                   @  sÒ   e Zd Zdefgdefgdefgdefgdefgdefdefdefgd	efgd
efgdefdefgdefdefdefgdefgdefdefdefgdœZd*dd„Zd+dd„Z	d,dd „Z
d-d#d$„Z	%d.d/d(d)„Zd%S )0ÚIcnsFileó   ic10ó   ic09ó   ic14ó   ic08ó   ic13ó   ic07s   it32s   t8mks   icp6ó   ic12s   ih32s   h8mks   icp5s   il32s   l8mkó   ic11s   icp4s   is32s   s8mk))é   rP   r$   )rP   rP   r   )é   rQ   r$   )rQ   rQ   r   )r(   r(   r$   )r(   r(   r   )é@   rR   r   )é    rS   r$   )é0   rT   r   )rS   rS   r   )é   rU   r$   )rU   rU   r   r   r   r   ÚNonec                 C  sœ   i | _ || _t|ƒ\}}t|ƒsd}t|ƒ‚t}||k rLt|ƒ\}}|dkr,d}t|ƒ‚|t7 }|t8 }||f| j |< | |tj¡ ||7 }||k sdS dS )z@
        fobj is a file-like object as an icns resource
        znot an icns filer   zinvalid block headerN)	Údctr   r   Ú_acceptr   r   r   rA   ÚSEEK_CUR)Úselfr   r!   Úfilesizer"   Úir8   r   r   r   Ú__init__¯   s$   ÷zIcnsFile.__init__úlist[tuple[int, int, int]]c                 C  sB   g }| j  ¡ D ]\}}|D ]\}}|| jv r| |¡  nqq|S ©N)ÚSIZESÚitemsrW   r0   )rZ   Úsizesr   ZfmtsÚfmtÚreaderr   r   r   Ú	itersizesÆ   s   

þ€zIcnsFile.itersizesr   c                 C  s    |   ¡ }|sd}t|ƒ‚t|ƒS )NzNo 32bit icon resources found)re   r   Úmax)rZ   rb   r"   r   r   r   ÚbestsizeÏ   s
   zIcnsFile.bestsizer   r   c                 C  sD   i }| j | D ]\}}| j |¡}|dur| || j||ƒ¡ q|S )zÂ
        Get an icon resource as {channel: array}.  Note that
        the arrays are bottom-up like windows bitmaps and will likely
        need to be flipped or transposed in some way.
        N)r`   rW   ÚgetÚupdater   )rZ   r   rW   Úcoderd   Údescr   r   r   ÚdataforsizeÖ   s   €zIcnsFile.dataforsizeNú-tuple[int, int] | tuple[int, int, int] | NoneúImage.Imagec                 C  s‚   |d u r	|   ¡ }nt|ƒdkr|d |d df}|  |¡}| d¡}|r&|S |d  ¡ }z
| |d ¡ W |S  ty@   Y |S w )Nr$   r   r   r=   r&   r:   )rg   Úlenrl   rh   ÚcopyZputalphaÚKeyError)rZ   r   Zchannelsr3   r   r   r   Úgetimageã   s    


þþzIcnsFile.getimage)r   r   r   rV   )r   r^   )r   r   )r   r   r   r   r_   )r   rm   r   rn   )Ú__name__Ú
__module__Ú__qualname__rF   r#   r;   r   r`   r]   re   rg   rl   rr   r   r   r   r   rG   “   s:    ýýýì


	
ÿrG   c                   @  sL   e Zd ZdZdZdZddd„Zedd	d
„ƒZej	ddd
„ƒZdddd„Z
dS )ÚIcnsImageFilea!  
    PIL image support for Mac OS .icns files.
    Chooses the best resolution, but will possibly load
    a different size image if you mutate the size attribute
    before calling 'load'.

    The info dictionary has a key 'sizes' that is a list
    of sizes that the icns file has.
    ZICNSzMac OS icns resourcer   rV   c                 C  sj   | j d usJ ‚t| j ƒ| _d| _| j ¡ | jd< | j ¡ | _| jd | jd  | jd | jd  f| _d S )Nr=   rb   r   r$   r   )	ÚfprG   ÚicnsÚ_modere   Úinforg   Ú	best_sizer   ©rZ   r   r   r   Ú_open
  s   
þzIcnsImageFile._openr   c                 C  s   | j S r_   )Ú_sizer|   r   r   r   r     s   zIcnsImageFile.sizeÚvaluec                 C  sl   | j d D ]*}|d |d  |d |d  f}|d |d  }|d |d  |kr/|| _ d S qd}t|ƒ‚)Nrb   r   r$   r   z2This is not one of the allowed sizes of this image)rz   r~   r@   )rZ   r   r   Zsimple_sizeÚscaler"   r   r   r   r     s    þNr€   ú
int | NoneúImage.core.PixelAccess | Nonec                 C  sš   |d ur| j d d… \}}|| || f| _ |||f| _tj | ¡}| jd ur0| jj | j kr0|S |  ¡  | j | j¡}| ¡ }|j| _|j	| _
|j | _ |S )Nr$   )r   r{   r   ÚloadZ_imr3   Zload_preparerx   rr   rC   ry   )rZ   r€   ÚwidthÚheightZpxr3   r   r   r   rƒ   &  s   zIcnsImageFile.load)r   rV   )r   r   )r   r   r   rV   r_   )r€   r   r   r‚   )rs   rt   ru   Ú__doc__ÚformatÚformat_descriptionr}   Úpropertyr   Úsetterrƒ   r   r   r   r   rv   ü   s    

rv   r3   rn   rw   Úfilenameústr | bytesrV   c              	   C  sÀ  t |dƒr	| ¡  dddddddddœ}d	d
„ | j dg ¡D ƒ}i }t| ¡ ƒD ]!}||v r2|| n|  ||f¡}t ¡ }| 	|d¡ | 
¡ ||< q(g }	| ¡ D ]\}
}|| }|	 |
tt|ƒ |f¡ qP| t¡ t}|tdt|	ƒ  7 }|tdd„ |	D ƒƒ7 }| t d|¡¡ | d¡ | t dtt|	ƒt  ¡¡ |	D ]}| |d ¡ | t d|d ¡¡ q |	D ]}| |d ¡ | t d|d ¡¡ | |d ¡ q·t |dƒrÞ| ¡  dS dS )za
    Saves the image as a series of PNG files,
    that are then combined into a .icns file.
    Úflushr(   rQ   rP   i   rS   rR   )rM   rK   rI   rH   rO   rN   rL   rJ   c                 S  s   i | ]}|j |“qS r   )r„   )Ú.0r3   r   r   r   Ú
<dictcomp>P  s    z_save.<locals>.<dictcomp>Zappend_imagesZpngr
   c                 s  s    | ]}|d  V  qdS )r   Nr   )rŽ   Úentryr   r   r   Ú	<genexpr>f  s   € z_save.<locals>.<genexpr>z>is   TOC r   r   r$   N)Úhasattrr   Zencoderinforh   ÚsetÚvaluesÚresizerA   rB   ÚsaveÚgetvaluera   r0   r   ro   ÚwriteÚMAGICÚsumr   Úpack)r3   rw   r‹   rb   Zprovided_imagesZsize_streamsr   ÚimageÚtempÚentriesÚtypeÚstreamZfile_lengthr   r   r   r   Ú_save>  sT   
ø
ÿý


ÿr¡   ÚprefixÚbytesÚboolc                 C  s
   |   t¡S r_   )r>   r™   )r¢   r   r   r   rX   z  s   
rX   z.icnsz
image/icnsÚ__main__r$   z)Syntax: python3 IcnsImagePlugin.py [file]Úrbrb   zout-ú-z.pngzout.pngÚwindows)r   r   r   r   )r   r   r   r   r   r   r   r   )r3   rn   rw   r   r‹   rŒ   r   rV   )r¢   r£   r   r¤   )1Ú
__future__r   rA   Úosr   ÚsysÚtypingr   Ú r   r   r   r   Zcheck_codecr?   r	   r™   r   r   r#   r   r;   rF   rG   rv   r¡   rX   Zregister_openr‡   Zregister_extensionZregister_saveZregister_mimers   ro   ÚargvÚprintÚexitÚopenrw   Zimfrz   r   r„   r…   r€   r–   r3   ÚplatformZ	startfiler   r   r   r   Ú<module>   sV   




,
%i
B
<
 ÿ
ø$ùû