B
    eAdš.  ã            
   @   s¤  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
rRd 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ƒtZ"ee"ƒZ#x(e#j$d  D ]Z%e%e#_%e# &d!e% ¡ q<W e !ejd ¡Z'e' &d"¡ W dQ R X ej(d#kr–e )d"¡ W dQ R X dS )$é    N)ÚImageÚ	ImageFileÚPngImagePluginÚfeaturesZjpg_2000)ÚJpeg2KImagePlugins   icnsé   c             C   s   t  d|  t¡¡S )Nz>4sI)ÚstructÚunpackÚreadÚ
HEADERSIZE)Úfobj© r   úE/var/www/html/venv/lib/python3.7/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   sz  |\}}|   |¡ |d |d  |d |d  f}|d |d  }||d krr|  |¡}t d||dddd¡}n t d|d¡}xðtdƒD ]ä}	g }
|}xˆ|dkr|  d¡}|s²P |d }|d@ rò|d	 }|  d¡}x4t|ƒD ]}|
 |¡ qÞW n|d }|
 |  |¡¡ ||8 }|dkr˜P q˜W |dkrBd
t|ƒ› d}t|ƒ‚t d|d 	|
¡dddd¡}|j
 |j
|	¡ qŠW d|iS )zn
    Read a 32bit RGB icon resource.  Seems to be either uncompressed or
    an RLE packbits-like scheme.
    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   2   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,   r1   r   r   r   Úread_mk]   s    
 r3   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_jpeg2000g   s0    









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 )!ÚIcnsFiles   ic10s   ic09s   ic14s   ic08s   ic13s   ic07s   it32s   t8mks   icp6s   ic12s   ih32s   h8mks   icp5s   il32s   l8mks   ic11s   icp4s   is32s   s8mk))i   i   r   )i   i   r   )é   r?   r   )r?   r?   r   )r    r    r   )r    r    r   )é@   r@   r   )é    rA   r   )é0   rB   r   )rA   rA   r   )é   rC   r   )rC   rC   r   c             C   s˜   i  | _ }|| _t|ƒ\}}t|ƒs0d}t|ƒ‚t}x^||k r’t|ƒ\}}|dkr^d}t|ƒ‚|t7 }|t8 }||f||< | |tj¡ ||7 }q6W 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   r8   ÚSEEK_CUR)Úselfr   rD   r   Úfilesizer   r0   r/   r   r   r   Ú__init__¥   s"    

zIcnsFile.__init__c             C   sH   g }x>| j  ¡ D ]0\}}x&|D ]\}}|| jkr| |¡ P qW qW |S )N)ÚSIZESÚitemsrD   r'   )rG   Ú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)rO   r   Úmax)rG   rL   r   r   r   r   ÚbestsizeÅ   s
    zIcnsFile.bestsizec             C   sH   i }x>| j | D ]0\}}| j |¡}|dk	r| || j||ƒ¡ qW |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   rD   ÚgetÚupdater   )rG   r   rD   ÚcoderN   Ú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¡ ¡ }y| |d ¡ W n tk
r€   Y nX |S )Nr   r   r   r5   r   r2   )rQ   ÚlenrV   rR   ÚcopyZputalphaÚKeyError)rG   r   Zchannelsr*   r   r   r   ÚgetimageÙ   s    
zIcnsFile.getimage)N)Ú__name__Ú
__module__Ú__qualname__r=   r   r3   r   rJ   rI   rO   rQ   rV   rZ   r   r   r   r   r>   ‰   s.   	r>   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.
    Z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 )Nr5   rL   r   r   r   )	r>   ÚfpÚicnsr:   rO   ÚinforQ   Ú	best_sizer   )rG   r   r   r   Ú_openþ   s    zIcnsImageFile._openc             C   s   | j S )N)Ú_size)rG   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 )	NrL   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)ra   rW   Úindexr7   rd   )rG   Ú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   )
rW   r   rb   r   Úloadr*   Zload_preparer`   rZ   r:   )rG   Zpxr*   r   r   r   ri      s    zIcnsImageFile.loadN)r[   r\   r]   Ú__doc__ÚformatÚformat_descriptionrc   Úpropertyr   Úsetterri   r   r   r   r   r^   ð   s   	
r^   c          	   C   sÔ  t |dƒr| ¡  dddddddddœ}d	d
„ | j dg ¡D ƒ}i }xRt| ¡ ƒD ]B}||krf|| n|  ||f¡}t ¡ }| 	|d¡ | 
¡ ||< qRW g }	x6| ¡ D ]*\}
}|| }|	 |
tt|ƒ |dœ¡ q¦W | t¡ t}|tdt|	ƒ  7 }|tdd„ |	D ƒƒ7 }| t d|¡¡ | d¡ | t dtt|	ƒt  ¡¡ x2|	D ]*}| |d ¡ | t d|d ¡¡ qLW x@|	D ]8}| |d ¡ | t d|d ¡¡ | |d ¡ q€W t |dƒrÐ| ¡  dS )za
    Saves the image as a series of PNG files,
    that are then combined into a .icns file.
    Úflushr    r?   i   i   rA   r@   )s   ic07s   ic08s   ic09s   ic10s   ic11s   ic12s   ic13s   ic14c             S   s   i | ]}||j “qS r   )Úwidth)re   r*   r   r   r   ú
<dictcomp>L  s    z_save.<locals>.<dictcomp>Zappend_imagesZpng)Útyper   Ústreamr   c             s   s   | ]}|d  V  qdS )r   Nr   )re   Úentryr   r   r   ú	<genexpr>d  s    z_save.<locals>.<genexpr>z>is   TOC rr   r   rs   N)Úhasattrro   ZencoderinforR   ÚsetÚvaluesÚresizer8   r9   ÚsaveÚgetvaluerK   r'   r   rW   ÚwriteÚMAGICÚsumr   Úpack)r*   r_   ÚfilenamerL   Zprovided_imagesZsize_streamsr   ÚimageÚtempÚentriesrr   rs   Zfile_lengthrt   r   r   r   Ú_save:  sN    




r„   c             C   s   | d d… t kS )Nr   )r}   )Úprefixr   r   r   rE   x  s    rE   z.icnsz
image/icnsÚ__main__r   z)Syntax: python3 IcnsImagePlugin.py [file]r   ÚrbrL   zout-%s-%s-%s.pngzout.pngÚwindows)*r8   Úosr   ÚsysZPILr   r   r   r   Zcheck_codecr6   r   r}   r   r   r   r   r3   r=   r>   r^   r„   rE   Zregister_openrk   Zregister_extensionZregister_saveZregister_mimer[   rW   ÚargvÚprintÚexitÚopenr_   Zimfra   r   rz   r*   ÚplatformZ	startfiler   r   r   r   Ú<module>   sF   
+
"gJ>
