o
    õ·i*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 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 r�e#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   úYC:\Users\psant\Downloads\PAF backend\school\venv\Lib\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  sr  |\}}|   |¡ |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 ]n}	g }
|}|dkrŽ|  d¡}|sXqŽ|d }|d@ ru|d	 }|  d¡}t|ƒD ]}|
 |¡ qm|d }|
 |  |¡¡ ||8 }|dkrŠqŽ|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ÚimZputband)r   r   r   r   r    Ú
pixel_sizeÚsizesqZindatar2   Zband_ixÚdataZ	bytesleftÚbyteZbyte_intÚ	blocksizeÚir"   Úbandr   r   r   r   6   sD   
 
ç

ñ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   r3   r4   r9   r   r   r   Úread_mkc   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!   r2   r"   Z
jp2kstreamÚfr   r   r   Úread_png_or_jpeg2000o   s4   




ÿþÿ





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"   r8   r7   r   r   r   Ú__init__°   s$   ÷zIcnsFile.__init__úlist[tuple[int, int, int]]c                 C  sB   g }| j  ¡ D ]\}}|D ]\}}|| jv r| |¡  qqq|S ©N)ÚSIZESÚitemsrW   r/   )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)rd   r   Úmax)rZ   ra   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   Úcoderc   Ú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:   )rf   Úlenrk   rg   ÚcopyZputalphaÚKeyError)rZ   r   Zchannelsr2   r   r   r   Úgetimageä   s    


þþzIcnsFile.getimage)r   r   r   rV   )r   r]   )r   r   )r   r   r   r   r^   )r   rl   r   rm   )Ú__name__Ú
__module__Ú__qualname__rF   r#   r;   r   r_   r\   rd   rf   rk   rq   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=   ra   r   r$   r   )	ÚfprG   ÚicnsÚ_moderd   Úinforf   Ú	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|ƒ‚)Nra   r   r$   r   z2This is not one of the allowed sizes of this image)ry   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   rz   r   ÚloadZ_imr2   Zload_preparerw   rq   rC   rx   )rZ   r   ÚwidthÚheightZpxr2   r   r   r   r‚   '  s   zIcnsImageFile.load)r   rV   )r   r   )r~   r   r   rV   r^   )r   r€   r   r�   )rr   rs   rt   Ú__doc__ÚformatÚformat_descriptionr|   Úpropertyr   Úsetterr‚   r   r   r   r   ru   ý   s    

ru   r2   rm   rv   Ú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ƒ   )Ú.0r2   r   r   r   Ú
<dictcomp>Q  s    z_save.<locals>.<dictcomp>Zappend_imagesZpngr
   c                 s  s   � | ]}|d  V  qdS )r   Nr   )r�   Úentryr   r   r   Ú	<genexpr>g  s   € z_save.<locals>.<genexpr>z>is   TOC r   r   r$   N)ÚhasattrrŒ   Zencoderinforg   ÚsetÚvaluesÚresizerA   rB   ÚsaveÚgetvaluer`   r/   r   rn   ÚwriteÚMAGICÚsumr   Úpack)r2   rv   rŠ   ra   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   {  s   
rX   z.icnsz
image/icnsÚ__main__r$   z)Syntax: python3 IcnsImagePlugin.py [file]Úrbra   zout-ú-z.pngzout.pngZwindows)r   r   r   r   )r   r   r   r   r   r   r   r   )r2   rm   rv   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   ru   r    rX   Zregister_openr†   Zregister_extensionZregister_saveZregister_mimerr   rn   ÚargvÚprintÚexitÚopenrv   Zimfry   r   rƒ   r„   r   r•   r2   ÚplatformÚ	startfiler   r   r   r   Ú<module>   sV   




-
%i
B
<
 ÿ
ø$ùû