U
    M»{jæ.  ã                   @  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rjd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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�râe!ej"ƒd'k �rBe#d(ƒ e $¡  e%ej"d d)ƒ�ŠZ&ee&ƒZ'e'j(d* D ]4Z)e) \Z*Z+Z,e'_)e' -d+e*› d,e+› d,e,› d-�¡ �qfe	 %ej"d ¡�Z.e. -d.¡ W 5 Q R X ej/d/k�rØe 0d.¡ W 5 Q R X dS )0é    )ÚannotationsN)ÚIOé   )ÚImageÚ	ImageFileÚPngImagePluginÚfeaturesZjpg_2000)ÚJpeg2KImagePlugins   icnsé   c                 C  s   t  d|  t¡¡S )Nz>4sI)ÚstructÚunpackÚreadÚ
HEADERSIZE)Úfobj© r   úR/var/www/html/bwave/python/venv/lib/python3.8/site-packages/PIL/IcnsImagePlugin.pyÚ
nextheader%   s    r   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   Ústart_lengthÚsizeÚ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indatar,   Zband_ixÚdataZ	bytesleftÚbyteÚ	blocksizeÚir   Úbandr   r   r   r   4   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   r-   r.   r3   r   r   r   Úread_mk_   s    
 r5   c           
      C  sì   |\}}|   |¡ |  d¡}|d d… dkrT|   |¡ t | ¡}t |j¡ d|iS |d d… dks||d d… dks||dkrÜtsŒd	}t|ƒ‚|   |¡ |  |¡}t	 
|¡}	t |	¡}t |j¡ |jdkrÔ| d¡}d|iS d
}t|ƒ‚d S )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   ZPngImageFiler   Z_decompression_bomb_checkr   Úenable_jpeg2kÚ
ValueErrorÚioÚBytesIOr	   ZJpeg2KImageFileÚmodeÚconvert)
r   r   r   r   r   r   r,   r   Z
jp2kstreamÚfr   r   r   Úread_png_or_jpeg2000i   s8    



ÿþýÿ





r?   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))é   rI   r   )rI   rI   r   )é   rJ   r   )rJ   rJ   r   )r"   r"   r   )r"   r"   r   )é@   rK   r   )é    rL   r   )é0   rM   r   )rL   rL   r   )é   rN   r   )rN   rN   r   c                 C  s”   i  | _ }|| _t|ƒ\}}t|ƒs0d}t|ƒ‚t}||k r�t|ƒ\}}|dkr\d}t|ƒ‚|t7 }|t8 }||f||< | |tj¡ ||7 }q4d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   rO   r   Úfilesizer   r2   r1   r   r   r   Ú__init__§   s"    
zIcnsFile.__init__c                 C  sB   g }| j  ¡ D ].\}}|D ] \}}|| jkr| |¡  qqq|S ©N)ÚSIZESÚitemsrO   r)   )rR   Úsizesr   ZfmtsÚfmtÚreaderr   r   r   Ú	itersizes¾   s    

zIcnsFile.itersizesc                 C  s    |   ¡ }|sd}t|ƒ‚t|ƒS )NzNo 32bit icon resources found)r[   r   Úmax)rR   rX   r   r   r   r   ÚbestsizeÇ   s
    zIcnsFile.bestsizec                 C  sD   i }| j | D ]0\}}| j |¡}|dk	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)rV   rO   ÚgetÚupdater   )rR   r   rO   ÚcoderZ   Údescr   r   r   ÚdataforsizeÎ   s    zIcnsFile.dataforsizeNc                 C  s†   |d kr|   ¡ }t|ƒdkr.|d |d df}|  |¡}| dd ¡}|rL|S | d¡ ¡ }z| |d ¡ W n tk
r€   Y nX |S )Nr   r   r   r7   r    r4   )r]   Úlenrb   r^   ÚcopyZputalphaÚKeyError)rR   r   Zchannelsr,   r   r   r   ÚgetimageÛ   s    
zIcnsFile.getimage)N)Ú__name__Ú
__module__Ú__qualname__r?   r   r5   r   rV   rT   r[   r]   rb   rf   r   r   r   r   r@   ‹   s6   ýýýì	r@   c                   @  sH   e Zd ZdZdZdZddœ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.
    ZICNSzMac OS icns resourceÚNone)Úreturnc                 C  s\   t | jƒ| _d| _| j ¡ | jd< | j ¡ | _| jd | jd  | jd | jd  f| _d S )Nr7   rX   r   r   r   )	r@   ÚfpÚicnsÚ_moder[   Úinfor]   Ú	best_sizer   ©rR   r   r   r   Ú_open   s    þzIcnsImageFile._openc                 C  s   | j S rU   )Ú_sizerr   r   r   r   r   
  s    zIcnsImageFile.sizec                 C  sª   |}|| j d kr0t|ƒdkr0|d |d df}|| j d kr†t|ƒdkr†|d dkr†dd„ | j d D ƒ}||kr†| j d | |¡ }|| j d kr d}t|ƒ‚|| _d S )	NrX   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)rp   rc   Úindexr9   rt   )rR   ÚvalueZ	info_sizeZ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 k	rh| jj| jkrh|S |  ¡  | j | j¡}| ¡ }|j| _|j	| _
|j| _|S )Nr   r   r   r   )rc   r   rq   r   Úloadr,   Zload_preparern   rf   r<   ro   )rR   Zpxr,   r   r   r   ry   "  s    þzIcnsImageFile.loadN)rg   rh   ri   Ú__doc__ÚformatÚformat_descriptionrs   Úpropertyr   Úsetterry   r   r   r   r   rj   ò   s   



rj   zImage.Imagez	IO[bytes]zstr | bytesrk   )r,   rm   Úfilenamerl   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}||k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"   rJ   rI   i   rL   rK   )rF   rD   rB   rA   rH   rG   rE   rC   c                 S  s   i | ]}|j |“qS r   )Úwidth)ru   r,   r   r   r   Ú
<dictcomp>N  s      z_save.<locals>.<dictcomp>Zappend_imagesZpngr
   c                 s  s   | ]}|d  V  qdS )r   Nr   )ru   Úentryr   r   r   Ú	<genexpr>d  s     z_save.<locals>.<genexpr>z>is   TOC r   r   r   N)Úhasattrr€   Zencoderinfor^   ÚsetÚvaluesÚresizer:   r;   ÚsaveÚgetvaluerW   r)   r   rc   ÚwriteÚMAGICÚsumr   Úpack)r,   rm   r   rX   Zprovided_imagesZsize_streamsr   ÚimageÚtempÚentriesÚtypeÚstreamZfile_lengthrƒ   r   r   r   Ú_save<  sR    
ø
ÿ
ý

r”   ÚbytesÚbool)Úprefixrl   c                 C  s   | d d… t kS )Nr   )rŒ   )r—   r   r   r   rP   x  s    rP   z.icnsz
image/icnsÚ__main__r   z)Syntax: python3 IcnsImagePlugin.py [file]ÚrbrX   zout-ú-z.pngzout.pngÚwindows)1Ú
__future__r   r:   Úosr   ÚsysÚtypingr   Ú r   r   r   r   Zcheck_codecr8   r	   rŒ   r   r   r   r   r5   r?   r@   rj   r”   rP   Zregister_openr{   Zregister_extensionZregister_saveZregister_mimerg   rc   ÚargvÚprintÚexitÚopenrm   Zimfrp   r   r�   ÚheightÚscaler‰   r,   ÚplatformZ	startfiler   r   r   r   Ú<module>   sJ   
+
"gJ<
"