o
    ë6Wjm0  ã                   @  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ÚfeaturesÚ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   úb/home/esfera/Documents/content_generation/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  sl  |\}}|   |¡ |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 ]k}	g }
|}|dkr‹|  d¡}|sXn3|d }|d@ rr|d	 }|  d¡}|
 |g| ¡ n|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ÚextendÚappendÚreprr   ÚjoinÚimÚputband)r   r   r   r    r!   Ú
pixel_sizeÚsizesqÚindatar4   Úband_ixÚdataÚ	bytesleftÚbyteÚbyte_intÚ	blocksizer#   Úbandr   r   r   r   6   sB   
 
è

ò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_mkb   s   
 rA   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_jpeg2000n   s2   




ÿÿ





rP   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))é   rZ   r%   )rZ   rZ   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   rI   ÚSEEK_CUR)Úselfr   r"   Úfilesizer#   Úir>   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Úitemsra   r1   )rd   Ú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)rd   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   ra   ÚgetÚupdater   )rd   r   ra   Ú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   rC   r'   r@   )rr   Úlenrw   rs   ÚcopyÚputalphaÚKeyError)rd   r   Úchannelsr4   r   r   r   Úgetimageã   s    


þþzIcnsFile.getimage)r   r   r   r`   )r   rh   )r   r   )r   r   r   r   ri   )r   rx   r   ry   )Ú__name__Ú
__module__Ú__qualname__rP   r$   rA   r   rj   rg   rp   rr   rw   r   r   r   r   r   rQ   “   s:    ýýýì


	
ÿrQ   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   r`   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 )NrC   rl   r   r%   r   )	ÚfprQ   ÚicnsÚ_moderp   Úinforr   Ú	best_sizer   ©rd   r   r   r   Ú_open
  s   
þzIcnsImageFile._openr   c                 C  s   | j S ri   )Ú_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|ƒ‚)Nrl   r   r%   r   z2This is not one of the allowed sizes of this image)rˆ   rŒ   rH   )rd   r�   r   Ú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   r‰   r   ÚloadÚ_imr4   Úload_preparer†   r   rL   r‡   )rd   r�   ÚwidthÚheightÚpxr4   r   r   r   r’   &  s   zIcnsImageFile.load)r   r`   )r   r   )r�   r   r   r`   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 | bytesr`   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[   rZ   i   r]   r\   )rW   rU   rS   rR   rY   rX   rV   rT   c                 S  s   i | ]}|j |“qS r   )r•   )Ú.0r4   r   r   r   Ú
<dictcomp>P  s    z_save.<locals>.<dictcomp>Úappend_imagesÚpngr   c                 s  s   � | ]}|d  V  qdS )r   Nr   )r    Úentryr   r   r   Ú	<genexpr>f  s   € z_save.<locals>.<genexpr>z>is   TOC r   r   r%   N)ÚhasattrrŸ   Úencoderinfors   ÚsetÚvaluesÚresizerI   rJ   Ú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   Ú_save>  sT   
ø
ÿý


ÿr¹   ÚprefixÚbytesÚboolc                 C  s
   |   t¡S ri   )rD   r®   )rº   r   r   r   rb   z  s   
rb   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   r`   )rº   r»   r   r¼   )1Ú
__future__r   rI   Úosr   ÚsysÚtypingr   Ú r   r   r   r   Úcheck_codecrG   r
   r®   r   r   r$   r   rA   rP   rQ   rƒ   r¹   rb   Ú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>   sV   




,
%i
B
<
 ÿ
ø$ùû