a
    ç´«j•2  ã                   @  sV  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rvddlmZ d	Zd
Zdddœdd„Zdddddœdd„Zdddddœdd„Zdddddœdd„Zdddddœdd„ZG dd„ dƒZG dd„ de
j
ƒZd dd!d"d#œd$d%„Zd&d'd(œd)d*„Ze	 ejee¡ e	 ejd+¡ e	  eje¡ e	 !ejd,¡ e"d-k�rRe#ej$ƒd.k �r†e%d/ƒ e &¡  e'ej$d d0ƒ�ªZ(ee(ƒZ)e)j*d1 D ]4Z+e+ \Z,Z-Z.e)_+e) /d2e,› d3e-› d3e.› d4�¡ �qªe	 'ej$d ¡�Z0e0 /d5¡ W d  ƒ n1 �s0    Y  ej1d6k�r2e 2d5¡ W d  ƒ n1 �sH0    Y  dS )7é    )ÚannotationsN)ÚIOé   )ÚImageÚ	ImageFileÚPngImagePluginÚfeatures)Ú	deprecateZjpg_2000)ÚJpeg2KImagePlugins   icnsé   ú	IO[bytes]ztuple[bytes, int]©ÚfobjÚreturnc                 C  s   t  d|  t¡¡S )Nz>4sI)ÚstructÚunpackÚreadÚ
HEADERSIZE)r   © r   úR/var/www/html/laksyashrimp/venv/lib/python3.9/site-packages/PIL/IcnsImagePlugin.pyÚ
nextheader&   s    r   ztuple[int, int]útuple[int, int, int]údict[str, Image.Image])r   Ústart_lengthÚsizer   c                 C  sH   |\}}|   |¡ |  d¡}|dkr0d}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  sp  |\}}|   |¡ |d |d  |d |d  f}|d |d  }||d krp|  |¡}t d||dddd¡}nøt d|d¡}tdƒD ]à}	g }
|}|dk�r|  d¡}|s®�q|d }|d@ rê|d	 }|  d¡}t|ƒD ]}|
 |¡ qØn|d }|
 |  |¡¡ ||8 }|dkr’�qq’|dk�r:d
t|ƒ› d�}t|ƒ‚t d|d 	|
¡dddd¡}|j
 |j
|	¡ q†d|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   7   s@    
 




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_mkd   s    
 r;   c           
      C  sÐ   |\}}|   |¡ |  d¡}| d¡rN|   |¡ t | ¡}t |j¡ d|iS | d¡s`|dkrÀtspd}t	|ƒ‚|   |¡ |  |¡}t
 |¡}	t |	¡}t |j¡ |jdkr¸| d¡}d|iS d}t	|ƒ‚d S )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_jpeg2000p   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œdd„Zddœdd„Z	ddœdd „Z
dd!d"œd#d$„Zd*d&d'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))é   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   ÚNoner   c                 C  s’   i | _ || _t|ƒ\}}t|ƒs,d}t|ƒ‚t}||k rŽt|ƒ\}}|dkrXd}t|ƒ‚|t7 }|t8 }||f| j |< | |tj¡ ||7 }q0d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__zlist[tuple[int, int, int]]©r   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   r   c                 C  sD   i }| j | D ]0\}}| 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.dataforsizeNz-tuple[int, int] | tuple[int, int, int] | NoneúImage.Imagec                 C  s‚   |d u r|   ¡ }nt|ƒdkr0|d |d df}|  |¡}| d¡}|rL|S |d  ¡ }z| |d ¡ W n ty|   Y n0 |S )Nr$   r   r   r=   r&   r:   )rf   Úlenrk   rg   ÚcopyZputalphaÚKeyError)rZ   r   Zchannelsr2   r   r   r   Úgetimageå   s    


zIcnsFile.getimage)N)Ú__name__Ú
__module__Ú__qualname__rF   r#   r;   r   r_   r\   rd   rf   rk   rp   r   r   r   r   rG   •   s8   ýýýì	 ÿrG   c                   @  s`   e Zd ZdZdZdZddœdd„Zeddœd	d
„ƒZej	dddœdd
„ƒZdd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 resourcerV   r]   c                 C  s\   t | jƒ| _d| _| j ¡ | jd< | j ¡ | _| jd | jd  | jd | jd  f| _d S )Nr=   ra   r   r$   r   )	rG   ÚfpÚicnsÚ_moderd   Úinforf   Ú	best_sizer   ©rZ   r   r   r   Ú_open  s    þzIcnsImageFile._openz&tuple[int, int] | tuple[int, int, int]c                 C  s   | j S r^   )Ú_sizerz   r   r   r   r     s    zIcnsImageFile.size)Úvaluer   c                 C  s¢   t |ƒdkr2tdddƒ || jd v r’|| _d S n`| jd D ]T}|d |d  |d |d  f}|d |d  }|d |d  |kr<|| _ d S q<d	}t|ƒ‚d S )
Nr%   z&Setting size to (width, height, scale)r<   zload(scale)ra   r   r$   r   z2This is not one of the allowed sizes of this image)rm   r	   rx   r|   r@   )rZ   r}   r   Zsimple_sizeÚscaler"   r   r   r   r     s     Nz
int | NonezImage.core.PixelAccess | None)r~   r   c                 C  sÔ   |d ust | jƒdkrr|d u r6t | jƒdkr6| jd }|d usBJ ‚| jd d… \}}|| || f| _|||f| _tj | ¡}| jd urš| jj| jkrš|S |  ¡  | j 	| j¡}| ¡ }|j| _|j
| _|j| _|S )Nr%   r$   )rm   r   ry   r   ÚloadZ_imr2   Zload_preparerv   rp   rC   rw   )rZ   r~   ÚwidthÚheightZpxr2   r   r   r   r   -  s"    
zIcnsImageFile.load)N)rq   rr   rs   Ú__doc__ÚformatÚformat_descriptionr{   Úpropertyr   Úsetterr   r   r   r   r   rt   þ   s   

rt   rl   zstr | bytesrV   )r2   ru   Úfilenamer   c              	   C  sÂ  t |dƒr| ¡  dddddddddœ}d	d
„ | j dg ¡D ƒ}i }t| ¡ ƒD ]B}||v rd|| n|  ||f¡}t ¡ }| 	|d¡ | 
¡ ||< qPg }	| ¡ D ](\}
}|| }|	 |
tt|ƒ |f¡ q | 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 ]8}| |d ¡ | t d|d ¡¡ | |d ¡ �qpt |dƒ�r¾| ¡  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>Z  r+   z_save.<locals>.<dictcomp>Zappend_imagesZpngr   c                 s  s   | ]}|d  V  qdS )r   Nr   )r‰   Úentryr   r   r   Ú	<genexpr>p  r+   z_save.<locals>.<genexpr>z>is   TOC r   r   r$   N)Úhasattrrˆ   Zencoderinforg   ÚsetÚvaluesÚresizerA   rB   ÚsaveÚgetvaluer`   r/   r   rm   ÚwriteÚMAGICÚsumr   Úpack)r2   ru   r‡   ra   Zprovided_imagesZsize_streamsr   ÚimageÚtempÚentriesÚtypeÚstreamZfile_lengthr‹   r   r   r   Ú_saveH  sR    
ø
ÿ
ý

rœ   ÚbytesÚbool)Úprefixr   c                 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.pngÚwindows)3Ú
__future__r   rA   Úosr   ÚsysÚtypingr   Ú r   r   r   r   Z
_deprecater	   Zcheck_codecr?   r
   r”   r   r   r#   r   r;   rF   rG   rt   rœ   rX   Zregister_openrƒ   Zregister_extensionZregister_saveZregister_mimerq   rm   ÚargvÚprintÚexitÚopenru   Zimfrx   r   r€   r�   r~   r‘   r2   ÚplatformZ	startfiler   r   r   r   Ú<module>   sL   
-%iJ<
"*