o
    ÒèFhÜ.  ã                   @  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mZm	Z	m
Z
 e
 d¡Zer/ddlmZ dZdZd	d
„ Zdd„ Zdd„ Zdd„ Zdd„ ZG dd„ dƒZG dd„ dejƒZdd„ Zdd„ Ze ejee¡ e ejd¡ e eje¡ e ejd¡ edkrüeej ƒdk r�e!dƒ e "¡  e#ej d d ƒ�[Z$ee$ƒZ%e%j&d! D ]Z'e' \Z(Z)Z*e%_'e% +d"e(› d#e)› d#e*› d$�¡ q¡e #ej d ¡�Z,e, +d%¡ W d  ƒ n1 sÓw   Y  ej-d&krêe .d%¡ W d  ƒ dS W d  ƒ dS 1 sõw   Y  dS dS )'é    )ÚannotationsNé   )ÚImageÚ	ImageFileÚPngImagePluginÚfeaturesÚjpg_2000)ÚJpeg2KImagePlugins   icnsé   c                 C  s   t  d|  t¡¡S )Nz>4sI)ÚstructÚunpackÚreadÚ
HEADERSIZE)Úfobj© r   úL/var/www/html/loop/nvenv/lib/python3.10/site-packages/PIL/IcnsImagePlugin.pyÚ
nextheader$   s   r   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   Ústart_lengthÚsizeÚ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Úindatar,   Úband_ixÚdataÚ	bytesleftÚbyteÚ	blocksizeÚir   Úbandr   r   r   r   3   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   r.   r/   r7   r   r   r   Úread_mk^   s   
 r9   c           
      C  sè   |\}}|   |¡ |  d¡}|d d… dkr*|   |¡ t | ¡}t |j¡ d|iS |d d… dks>|d d… dks>|dkrntsFd	}t|ƒ‚|   |¡ |  |¡}t	 
|¡}	t |	¡}t |j¡ |jdkrj| d¡}d|iS d
}t|ƒ‚)Né   r
   s   ‰PNG

ÚRGBAr   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   r   ÚPngImageFiler   Ú_decompression_bomb_checkr   Úenable_jpeg2kÚ
ValueErrorÚioÚBytesIOr	   ÚJpeg2KImageFileÚmodeÚconvert)
r   r   r   r   r   r   r,   r   Ú
jp2kstreamÚfr   r   r   Úread_png_or_jpeg2000h   s2   



ÿ





rG   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„ Zdd„ Z	dd„ Z
dd„ Zd dd„ZdS )!ÚIcnsFileó   ic10ó   ic09ó   ic14ó   ic08ó   ic13ó   ic07s   it32s   t8mks   icp6ó   ic12s   ih32s   h8mks   icp5s   il32s   l8mkó   ic11s   icp4s   is32s   s8mk))é   rQ   r   )rQ   rQ   r   )é   rR   r   )rR   rR   r   )r"   r"   r   )r"   r"   r   )é@   rS   r   )é    rT   r   )é0   rU   r   )rT   rT   r   )é   rV   r   )rV   rV   r   c                 C  sž   i  | _ }|| _t|ƒ\}}t|ƒsd}t|ƒ‚t}||k rMt|ƒ\}}|dkr.d}t|ƒ‚|t7 }|t8 }||f||< | |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   r@   ÚSEEK_CUR)Úselfr   rW   r   Úfilesizer   r6   r5   r   r   r   Ú__init__¦   s$   
÷zIcnsFile.__init__c                 C  sB   g }| j  ¡ D ]\}}|D ]\}}|| jv r| |¡  nqq|S ©N)ÚSIZESÚitemsrW   r)   )rZ   Úsizesr   ÚfmtsÚfmtÚreaderr   r   r   Ú	itersizes½   s   

þ€zIcnsFile.itersizesc                 C  s    |   ¡ }|sd}t|ƒ‚t|ƒS )NzNo 32bit icon resources found)rd   r   Úmax)rZ   r`   r   r   r   r   ÚbestsizeÆ   s
   zIcnsFile.bestsizec                 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.dataforsizeNc                 C  s„   |d u r|   ¡ }t|ƒdkr|d |d df}|  |¡}| dd ¡}|r&|S | d¡ ¡ }z
| |d ¡ W |S  tyA   Y |S w )Nr   r   r   r;   r    r8   )rf   Úlenrk   rg   ÚcopyÚputalphaÚKeyError)rZ   r   Úchannelsr,   r   r   r   ÚgetimageÚ   s    
þþzIcnsFile.getimager]   )Ú__name__Ú
__module__Ú__qualname__rG   r   r9   r   r^   r\   rd   rf   rk   rq   r   r   r   r   rH   Š   s8    ýýýì	rH   c                   @  sB   e Zd ZdZdZdZdd„ Zedd„ ƒZej	dd„ ƒZ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 resourcec                 C  s\   t | jƒ| _d| _| j ¡ | jd< | j ¡ | _| jd | jd  | jd | jd  f| _d S )Nr;   r`   r   r   r   )	rH   ÚfpÚicnsÚ_moderd   Úinforf   Ú	best_sizer   ©rZ   r   r   r   Ú_openÿ   s   
þzIcnsImageFile._openc                 C  s   | j S r]   )Ú_sizer|   r   r   r   r   	  s   zIcnsImageFile.sizec                 C  sª   |}|| j d vrt|ƒdkr|d |d df}|| j d vrCt|ƒdkrC|d dkrCdd„ | j d D ƒ}||v rC| j d | |¡ }|| j d vrPd}t|ƒ‚|| _d S )	Nr`   r   r   r   r   c                 S  s,   g | ]}|d  |d  |d |d  f‘qS )r   r   r   r   )Ú.0r   r   r   r   Ú
<listcomp>  s     ÿz&IcnsImageFile.size.<locals>.<listcomp>z2This is not one of the allowed sizes of this image)rz   rl   Úindexr?   r~   )rZ   ÚvalueÚ	info_sizeÚsimple_sizesr   r   r   r   r     s   ÿ
c                 C  s¢   t | jƒdkr | j| _| jd | jd  | jd | jd  f| _tj | ¡}| jd ur4| jj| jkr4|S |  ¡  | j | j¡}| ¡ }|j| _|j	| _
|j| _|S )Nr   r   r   r   )rl   r   r{   r   Úloadr,   Úload_preparerx   rq   rC   ry   )rZ   Úpxr,   r   r   r   r…   !  s   þzIcnsImageFile.loadN)rr   rs   rt   Ú__doc__ÚformatÚformat_descriptionr}   Úpropertyr   Úsetterr…   r   r   r   r   ru   ñ   s    



ru   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|ƒ |dœ¡ 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"   rR   rQ   i   rT   rS   )rN   rL   rJ   rI   rP   rO   rM   rK   c                 S  s   i | ]}|j |“qS r   )Úwidth)r   r,   r   r   r   Ú
<dictcomp>M  s    z_save.<locals>.<dictcomp>Úappend_imagesÚpng)Útyper   Ústreamr
   c                 s  s   � | ]}|d  V  qdS )r   Nr   )r   Úentryr   r   r   Ú	<genexpr>e  s   € z_save.<locals>.<genexpr>z>is   TOC r’   r   r“   N)Úhasattrr�   Úencoderinforg   ÚsetÚvaluesÚresizer@   rA   ÚsaveÚgetvaluer_   r)   r   rl   ÚwriteÚMAGICÚsumr   Úpack)r,   rw   Úfilenamer`   Úprovided_imagesÚsize_streamsr   ÚimageÚtempÚentriesr’   r“   Úfile_lengthr”   r   r   r   Ú_save;  sX   
ø
ÿýÿ


ÿr¨   c                 C  s   | d d… t kS )Nr   )rž   )Úprefixr   r   r   rX   y  s   rX   z.icnsz
image/icnsÚ__main__r   z)Syntax: python3 IcnsImagePlugin.py [file]Úrbr`   zout-ú-z.pngzout.pngÚwindows)/Ú
__future__r   r@   Úosr   ÚsysÚ r   r   r   r   Úcheck_codecr>   r	   rž   r   r   r   r   r9   rG   rH   ru   r¨   rX   Úregister_openr‰   Úregister_extensionÚregister_saveÚregister_mimerr   rl   ÚargvÚprintÚexitÚopenrw   Úimfrz   r   rŽ   ÚheightÚscaler›   r,   ÚplatformÚ	startfiler   r   r   r   Ú<module>   sT   
+
"gJ> ÿ
ø"ùû