o
    üÞhË0  ã                   @  s  d dl mZ d dlZd dlmZ d dlmZmZ d dlm	Z	m
Z
 ddlmZmZmZmZ ddlmZ dd	lmZ dd
lmZ ddlmZ ddlmZ dZd%dd„Zd&dd„ZG dd„ de
ƒZG dd „ d ƒZG d!d"„ d"ejƒZe  ej!ee¡ e "ej!e¡ e #ej!d#¡ e $ej!d$¡ dS )'é    )ÚannotationsN)ÚBytesIO)ÚceilÚlog)ÚIOÚ
NamedTupleé   )ÚBmpImagePluginÚImageÚ	ImageFileÚPngImagePlugin)Úi16le)Úi32le)Úo8)Úo16le)Úo32les      ÚimúImage.ImageÚfpú	IO[bytes]Úfilenameústr | bytesÚreturnÚNonec                 C  sâ  |  t¡ | j d¡dk}| j dg d¢¡}g }| g| j dg ¡ }| j\}}tt|ƒƒD ]m}	|	d |ksG|	d |ksG|	d dksG|	d dkrHq-|D ]<}
|
j|	krRqJ| |
¡ |r…tj	|
j
 d }|g}|D ]}|j|	krnqftj	|j
 d }||vr„| |¡ | |¡ qf n|
 ¡ }|j|	tjjd d	� | |¡ q-|  tt|ƒƒ¡ | ¡ t|ƒd
  }|D ]¾}|j\}}|  t|dk rÀ|ndƒ¡ |  t|dk rÍ|ndƒ¡ |rÝtj	|j
 dd … nd\}}|  t|ƒ¡ |  d¡ |  d¡ |  t|ƒ¡ tƒ }|�r!| |d¡ |dk�r t d|	¡}t ||t dd|	 dd¡g¡ n| |d¡ | d¡ | ¡ }|�rE|d d… t|d ƒ |dd …  }t|ƒ}|  t|ƒ¡ |  t|ƒ¡ | ¡ }| |¡ |  |¡ || }| |¡ q°d S )NÚbitmap_formatÚbmpÚsizes))é   r   )é   r   )é    r   )é0   r    )é@   r!   )é€   r"   )é   r#   Úappend_imagesr   r   r#   )Úreducing_gapr   )r   r   ó    s     Údibr   Ú1Úraw©r   r   )r(   r   éÿÿÿÿÚpngé   é   é   )ÚwriteÚ_MAGICÚencoderinfoÚgetÚsizeÚsortedÚsetÚappendr	   ÚSAVEÚmodeÚcopyÚ	thumbnailr
   Ú
ResamplingÚLANCZOSÚo16ÚlenÚtellr   r   ÚsaveÚnewr   Ú_saveÚ_TileÚseekÚreadÚo32)r   r   r   r   r   ÚframesÚprovided_imsÚwidthÚheightr4   Úprovided_imÚbitsÚ	bits_usedÚother_imÚframeÚoffsetÚcolorsÚimage_ioÚand_maskÚimage_bytesÚ	bytes_lenÚcurrent© rX   úR/var/www/html/premium_crap/venv/lib/python3.10/site-packages/PIL/IcoImagePlugin.pyrC   +   sˆ   
þ
0




€
€
 


ý€
$

ÜrC   ÚprefixÚbytesÚboolc                 C  s
   |   t¡S ©N)Ú
startswithr1   )rZ   rX   rX   rY   Ú_acceptx   s   
r_   c                   @  sf   e Zd ZU ded< ded< ded< ded< ded< ded< ded< ded	< d
ed< ded< ded< dS )Ú
IconHeaderÚintrJ   rK   Únb_colorÚreservedÚplanesÚbppr4   rQ   útuple[int, int]ÚdimÚsquareÚcolor_depthN)Ú__name__Ú
__module__Ú__qualname__Ú__annotations__rX   rX   rX   rY   r`   |   s   
 r`   c                   @  sB   e Zd Zddd„Zddd	„Zdddd„Zdddd„Zddd„ZdS )ÚIcoFileÚbufr   r   r   c           
      C  s  |  d¡}t|ƒsd}t|ƒ‚|| _g | _t|dƒ| _t| jƒD ]P}|  d¡}|d p,d}|d p2d}|d }t|dƒ}t||||d	 t|dƒt|dƒt	|d
ƒt	|dƒ||f|| |pg|dkrft
t|dƒƒpgdd�}	| j |	¡ q t| jdd„ d�| _t| jdd„ dd�| _dS )zL
        Parse image from file-like object containing ico file data
        é   znot an ICO fileé   r   r   r#   r   r.   é   r-   r/   )rJ   rK   rb   rc   rd   re   r4   rQ   rg   rh   ri   c                 S  ó   | j S r]   )ri   ©ÚxrX   rX   rY   Ú<lambda>¹   ó    z"IcoFile.__init__.<locals>.<lambda>)Úkeyc                 S  rs   r]   )rh   rt   rX   rX   rY   rv   »   rw   T)rx   ÚreverseN)rF   r_   ÚSyntaxErrorro   ÚentryÚi16Únb_itemsÚranger`   Úi32r   r   r7   r5   )
Úselfro   ÚsÚmsgÚirJ   rK   rb   re   Úicon_headerrX   rX   rY   Ú__init__‹   s:   


ózIcoFile.__init__úset[tuple[int, int]]c                 C  s   dd„ | j D ƒS )zI
        Get a set of all available icon sizes and color depths.
        c                 S  s   h | ]}|j |jf’qS rX   )rJ   rK   )Ú.0ÚhrX   rX   rY   Ú	<setcomp>Á   s    z IcoFile.sizes.<locals>.<setcomp>)r{   ©r€   rX   rX   rY   r   ½   s   zIcoFile.sizesFr4   rf   re   ú
int | boolra   c                 C  s<   t | jƒD ]\}}||jkr|du s||jkr|  S qdS )NFr   )Ú	enumerater{   rg   ri   )r€   r4   re   rƒ   rˆ   rX   rX   rY   ÚgetentryindexÃ   s
   €zIcoFile.getentryindexr   c                 C  s   |   |  ||¡¡S )z,
        Get an image from the icon
        )rP   r�   )r€   r4   re   rX   rX   rY   ÚgetimageÉ   s   zIcoFile.getimageÚidxc              
   C  s  | j | }| j |j¡ | j d¡}| j |j¡ |dd… tjkr0t | j¡}t 	|j
¡ |S t | j¡}t 	|j
¡ |j
d t|j
d d ƒf|_|jd \}}}}t |d|j
 ||¡|jd< |jdkrŸ| j |¡ | j |j
d |j
d  d ¡d	dd… }	zt d
|j
|	dd¡}
W ni tyž   tjr›d}
n‚ Y nZw |j
d }|d dkrµ|d|j
d d  7 }t||j
d  d ƒ}|j|j
 | }| j |¡ | j |¡}zt d|j
|ddt|d ƒdf¡}
W n ty÷   tjrôd}
n‚ Y nw |
�r| d¡}| |
¡ |S )z-
        Get an image from frame idx
        r-   Nr   r   r.   r*   r   rq   rr   ÚLr)   )r�   r   r+   r(   z1;Ir+   ÚRGBA)r{   ro   rE   rQ   rF   r   r1   ÚPngImageFiler
   Ú_decompression_bomb_checkr4   r	   ÚDibImageFilera   Ú_sizeÚtiler   rD   re   Ú
frombufferÚ
ValueErrorÚLOAD_TRUNCATED_IMAGESÚconvertÚputalpha)r€   r�   ÚheaderÚdatar   ÚdÚeÚoÚaÚalpha_bytesÚmaskÚwÚtotal_bytesÚand_mask_offsetÚ	mask_datarX   rX   rY   rP   Ï   sn   
K¸
*ûþþ
ûþþ	

zIcoFile.frameN)ro   r   r   r   )r   r†   )F)r4   rf   re   r‹   r   ra   )r4   rf   re   r‹   r   r   )r�   ra   r   r   )rj   rk   rl   r…   r   r�   rŽ   rP   rX   rX   rX   rY   rn   Š   s    

2rn   c                   @  sT   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„Z
ddd„ZdS )ÚIcoImageFileaý  
    PIL read-only image support for Microsoft Windows .ico files.

    By default the largest resolution image in the file will be loaded. This
    can be changed by altering the 'size' attribute before calling 'load'.

    The info dictionary has a key 'sizes' that is a list of the sizes available
    in the icon file.

    Handles classic, XP and Vista icon formats.

    When saving, PNG compression is used. Support for this was only added in
    Windows Vista. If you are unable to view the icon in Windows, convert the
    image to "RGBA" mode before saving.

    This plugin is a refactored version of Win32IconImagePlugin by Bryan Davis
    <casadebender@gmail.com>.
    https://code.google.com/archive/p/casadebender/wikis/Win32IconImagePlugin.wiki
    ÚICOzWindows Iconr   r   c                 C  s8   t | jƒ| _| j ¡ | jd< | jjd j| _|  ¡  d S )Nr   r   )	rn   r   Úicor   Úinfor{   rg   r4   ÚloadrŠ   rX   rX   rY   Ú_openH  s   zIcoImageFile._openrf   c                 C  rs   r]   )r•   rŠ   rX   rX   rY   r4   N  s   zIcoImageFile.sizeÚvaluec                 C  s$   || j d vrd}t|ƒ‚|| _d S )Nr   z2This is not one of the allowed sizes of this image)r«   r˜   r•   )r€   r®   r‚   rX   rX   rY   r4   R  s   
úImage.core.PixelAccess | Nonec                 C  s¶   | j d ur| jj| jkrtj | ¡S | j | j¡}| ¡  |j| _|j| _|j	r,|j	| _	|j| jkrUt
 d¡ | j | j¡}t| jd ƒ}|j||< t|ƒ| jd< |j| _tj | ¡S )NzImage was not the expected sizer   )Ú_imr   r4   r
   r¬   rª   rŽ   r9   Ú_modeÚpaletteÚwarningsÚwarnr�   Úlistr«   r6   )r€   r   Úindexr   rX   rX   rY   r¬   Y  s    

zIcoImageFile.loadÚposra   c                 C  s   d S r]   rX   )r€   r·   rX   rX   rY   Ú	load_seeko  s   zIcoImageFile.load_seekN)r   r   )r   rf   )r®   rf   r   r   )r   r¯   )r·   ra   r   r   )rj   rk   rl   Ú__doc__ÚformatÚformat_descriptionr­   Úpropertyr4   Úsetterr¬   r¸   rX   rX   rX   rY   r¨   0  s    

r¨   z.icozimage/x-icon)r   r   r   r   r   r   r   r   )rZ   r[   r   r\   )%Ú
__future__r   r³   Úior   Úmathr   r   Útypingr   r   Ú r	   r
   r   r   Ú_binaryr   r|   r   r   r   r   r>   r   rG   r1   rC   r_   r`   rn   r¨   Úregister_openrº   Úregister_saveÚregister_extensionÚregister_mimerX   rX   rX   rY   Ú<module>   s,   

M 'I