o
    üÞh•2  ã                   @  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 ddlmZ e d¡Zer;d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d0¡ e"d1k�re#ej$ƒd2k r£e%d3ƒ e &¡  e'ej$d d4ƒ�[Z(ee(ƒZ)e)j*d5 D ]Z+e+ \Z,Z-Z.e)_+e) /d6e,› d7e-› d7e.› d8�¡ qµe	 'ej$d ¡�Z0e0 /d9¡ W d  ƒ n1 sçw   Y  ej1d:krþe 2d9¡ W d  ƒ dS W d  ƒ dS 1 �s
w   Y  dS dS )?é    )ÚannotationsN)ÚIOé   )ÚImageÚ	ImageFileÚPngImagePluginÚfeatures)Ú	deprecateÚ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   úS/var/www/html/premium_crap/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  st  |\}}|   |¡ |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 ]o}	g }
|}|dkr�|  d¡}|sXn7|d }|d@ rv|d	 }|  d¡}t|ƒD ]}|
 |¡ qmn|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ÚappendÚreprr   ÚjoinÚimÚputband)r   r   r   r!   r"   Ú
pixel_sizeÚsizesqÚindatar4   Úband_ixÚdataÚ	bytesleftÚbyteÚbyte_intÚ	blocksizeÚir$   Úbandr   r   r   r    7   sF   
 
ç

ÿñ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!   r6   r7   r@   r   r   r   Úread_mkd   s   
 rB   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   ÚPngImageFiler   Ú_decompression_bomb_checkr   Úenable_jpeg2kÚ
ValueErrorÚioÚBytesIOr   ÚJpeg2KImageFileÚmodeÚconvert)
r   r   r   r!   r"   r#   r4   r$   Ú
jp2kstreamÚfr   r   r   Úread_png_or_jpeg2000p   s2   




ÿÿ





rQ   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))é   r[   r&   )r[   r[   r   )é   r\   r&   )r\   r\   r   )r*   r*   r&   )r*   r*   r   )é@   r]   r   )é    r^   r&   )é0   r_   r   )r^   r^   r   )é   r`   r&   )r`   r`   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   rJ   ÚSEEK_CUR)Úselfr   r#   Úfilesizer$   r?   r>   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Úitemsrb   r1   )re   Úsizesr   ÚfmtsÚfmtÚreaderr   r   r   Ú	itersizesÈ   s   

þ€zIcnsFile.itersizesr   c                 C  s    |   ¡ }|sd}t|ƒ‚t|ƒS )NzNo 32bit icon resources found)rp   r   Úmax)re   rl   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)rj   rb   ÚgetÚupdater   )re   r   rb   Úcodero   Ú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   rD   r(   rA   )rr   Úlenrw   rs   ÚcopyÚputalphaÚKeyError)re   r   Úchannelsr4   r   r   r   Úgetimageå   s    


þþzIcnsFile.getimage)r   r   r   ra   )r   rh   )r   r   )r   r   r   r   ri   )r   rx   r   ry   )Ú__name__Ú
__module__Ú__qualname__rQ   r%   rB   r    rj   rg   rp   rr   rw   r   r   r   r   r   rR   •   s:    ýýýì


	
ÿrR   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.
    ÚICNSzMac OS icns resourcer   ra   c                 C  s\   t | jƒ| _d| _| j ¡ | jd< | j ¡ | _| jd | jd  | jd | jd  f| _d S )NrD   rl   r   r&   r   )	rR   ÚfpÚicnsÚ_moderp   Úinforr   Ú	best_sizer   ©re   r   r   r   Ú_open  s   
þzIcnsImageFile._openú&tuple[int, int] | tuple[int, int, int]c                 C  s   | j S ri   )Ú_sizerŠ   r   r   r   r     s   zIcnsImageFile.sizeÚvaluec                 C  sž   t |ƒdkrtdddƒ || jd v r|| _d S n0| jd D ]*}|d |d  |d |d  f}|d |d  }|d |d  |krH|| _ d S qd	}t|ƒ‚)
Nr'   z&Setting size to (width, height, scale)rC   zload(scale)rl   r   r&   r   z2This is not one of the allowed sizes of this image)rz   r	   rˆ   r�   rI   )re   rŽ   r   Úsimple_sizeÚscaler$   r   r   r   r     s   þ þNr�   ú
int | NoneúImage.core.PixelAccess | Nonec                 C  sÔ   |d ust | jƒdkr9|d u rt | jƒdkr| jd }|d us!J ‚| jd d… \}}|| || f| _|||f| _tj | ¡}| jd urM| jj| jkrM|S |  ¡  | j 	| j¡}| ¡ }|j| _|j
| _|j| _|S )Nr'   r&   )rz   r   r‰   r   ÚloadÚ_imr4   Úload_preparer†   r   rM   r‡   )re   r�   ÚwidthÚheightÚpxr4   r   r   r   r“   -  s"   
zIcnsImageFile.load)r   ra   )r   rŒ   )rŽ   rŒ   r   ra   ri   )r�   r‘   r   r’   )r€   r�   r‚   Ú__doc__ÚformatÚformat_descriptionr‹   Úpropertyr   Úsetterr“   r   r   r   r   rƒ   þ   s    


rƒ   r4   ry   r…   Úfilenameústr | bytesra   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*   r\   r[   i   r^   r]   )rX   rV   rT   rS   rZ   rY   rW   rU   c                 S  s   i | ]}|j |“qS r   )r–   )Ú.0r4   r   r   r   Ú
<dictcomp>Z  s    z_save.<locals>.<dictcomp>Úappend_imagesÚpngr   c                 s  s   � | ]}|d  V  qdS )r   Nr   )r¡   Úentryr   r   r   Ú	<genexpr>p  s   € z_save.<locals>.<genexpr>z>is   TOC r   r   r&   N)Úhasattrr    Úencoderinfors   ÚsetÚvaluesÚresizerJ   rK   ÚsaveÚgetvaluerk   r1   r   rz   ÚwriteÚMAGICÚsumr   Úpack)r4   r…   rž   rl   Úprovided_imagesÚsize_streamsr   ÚimageÚtempÚentriesÚtypeÚstreamÚfile_lengthr¥   r   r   r   Ú_saveH  sT   
ø
ÿý


ÿrº   ÚprefixÚbytesÚboolc                 C  s
   |   t¡S ri   )rE   r¯   )r»   r   r   r   rc   „  s   
rc   z.icnsz
image/icnsÚ__main__r&   z)Syntax: python3 IcnsImagePlugin.py [file]Úrbrl   zout-ú-z.pngzout.pngÚwindows)r   r   r   r   )r   r   r   r   r   r   r   r   )r4   ry   r…   r   rž   rŸ   r   ra   )r»   r¼   r   r½   )3Ú
__future__r   rJ   Úosr   ÚsysÚtypingr   Ú r   r   r   r   Ú
_deprecater	   Úcheck_codecrH   r   r¯   r   r   r%   r    rB   rQ   rR   rƒ   rº   rc   Úregister_openrš   Úregister_extensionÚregister_saveÚregister_mimer€   rz   ÚargvÚprintÚexitÚopenr…   Úimfrˆ   r   r–   r—   r�   r¬   r4   ÚplatformÚ	startfiler   r   r   r   Ú<module>   sX   




-
%i
J
<
 ÿ
ø$ùû