3

hL-                 @   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j	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jejee ejejd ejeje ejejd edkreejdk red ej   e!ejd dtZ"ee"Z#x(e#j$d  D ]Z%e%e#_%e#j&d!e%  q<W ej!ejd Z'e'j&d" W dQ R X ej(d#krej)d" W dQ R X dS )$    N)Image	ImageFilePngImagePluginfeaturesZjpg_2000)Jpeg2KImagePlugins   icns   c             C   s   t jd| jtS )Nz>4sI)structunpackread
HEADERSIZE)fobj r   S/var/www/html/enquirykeeper_venv/lib/python3.6/site-packages/PIL/IcnsImagePlugin.py
nextheader#   s    r   c             C   sD   |\}}| j | | jd}|dkr,tdt| |d |d f|S )N   s       z'Unknown signature, expecting 0x00000000)seekr
   SyntaxErrorread_32)r   start_lengthsizestartlengthsigr   r   r   read_32t'   s    

r   c          	   C   sv  |\}}| j | |d |d  |d |d  f}|d |d  }||d krr| j|}tjd||dddd} ntjd|d}xtdD ]}	g }
|}x|dkr| jd}|sP |d }|d@ r|d	 }| jd}x4t|D ]}|
j| qW n|d }|
j| j| ||8 }|dkrP qW |dkr>td
t| dtjd|dj	|
dddd}|j
j|j
|	 qW 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appendr   reprjoinimZputband)r   r   r   r   r   
pixel_sizesizesqZindatar)   Zband_ixdataZ	bytesleftbyte	blocksizeibandr   r   r   r   1   s>    
 



r   c             C   sf   |d }| j | |d |d  |d |d  f}|d |d  }tjd|| j|dddd}d|iS )Nr   r   r   r!   r   A)r   r   r#   r
   )r   r   r   r   r*   r+   r0   r   r   r   read_mk[   s    
 r2   c       	      C   s   |\}}| j | | jd}|d d dkrT| j | tj| }tj|j d|iS |d d dks||d d dks||dkrtstd	| j | | j|}t	j
|}tj|}tj|j |jdkr|jd}d|iS td
d S )N   r   s   PNG

RGBAr   s   OQs   

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)   Z
jp2kstreamfr   r   r   read_png_or_jpeg2000e   s.    









r<   c               @   s   e Zd Zd(defgd)defgd*defgd+defgd,d
efgd-defdefdefgd.defgd/defgd0defdefgd1defdefdefgd2defgd3defdefdefgiZdd Zdd  Z	d!d" Z
d#d$ Zd4d&d'Zd%S )5IcnsFile   r   s   ic10r   s   ic09   s   ic14s   ic08r   s   ic13s   ic07s   it32s   t8mk@   s   icp6    s   ic120   s   ih32s   h8mks   icp5s   il32s   l8mk   s   ic11s   icp4s   is32s   s8mkc             C   s   i  | _ }|| _t|\}}|tkr,tdt}xZ||k rt|\}}|dkrVtd|t7 }|t8 }||f||< |j|tj ||7 }q2W dS )z@
        fobj is a file-like object as an icns resource
        znot an icns filer   zinvalid block headerN)	dctr   r   MAGICr   r   r   r7   SEEK_CUR)selfr   rD   r   filesizer/   r.   r   r   r   __init__   s    

zIcnsFile.__init__c             C   sH   g }x>| j j D ]0\}}x&|D ]\}}|| jkr|j| 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   | j  }|stdt|S )NzNo 32bit icon resources found)rO   r   max)rG   rL   r   r   r   bestsize   s    zIcnsFile.bestsizec             C   sH   i }x>| j | D ]0\}}| jj|}|dk	r|j|| 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| j  }t|dkr.|d |d df}| j|}|jdd }|rL|S |jdj }y|j|d  W n tk
r   Y nX |S )Nr   r   r   r4   r   r1   )rQ   lenrV   rR   copyZputalphaKeyError)rG   r   Zchannelsr)   r   r   r   getimage   s    
zIcnsFile.getimage)r>   r>   r   )r>   r>   r   )r?   r?   r   )r?   r?   r   )r   r   r   )r   r   r   )r@   r@   r   )rA   rA   r   )rB   rB   r   )rA   rA   r   )rC   rC   r   )rC   rC   r   )N)__name__
__module____qualname__r<   r   r2   r   rJ   rI   rO   rQ   rV   rZ   r   r   r   r   r=      s4   







	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 | jd< | jj | _| jd | jd  | jd | jd  f| _d S )Nr4   rL   r   r   r   )	r=   fpicnsr9   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rt|dkr|d dkrdd | j d D }||kr| j d |j| }|| j d krtd|| _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   indexr6   rd   )rG   valueZ	info_sizeZsimple_sizesr   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|  | jrd| jj| jkrdd S | j  | jj| j}|j  |j| _|j	| _	|j| _| j
  d S )Nr   r   r   r   )rW   r   rb   r   loadr)   Zload_preparer`   rZ   r9   Zload_end)rG   r)   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|j  ddddddddd}d	d
 | jjdg D }i }xRt|j D ]B}||krf|| n| j||f}tj }|j	|d |j
 ||< qRW g }	x2|j D ]&\}
}|| }|	j|
t||d qW |jt |jtjdtdd |	D  |jd |jtjdtt|	t   x6|	D ].}|j|d  |jtjdt|d   q(W xD|	D ]<}|j|d  |jtjdt|d   |j|d  q`W t |dr|j  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>D  s    z_save.<locals>.<dictcomp>Zappend_imagesZpng)typer   streamz>ic             s   s   | ]}|d  V  qdS )r   Nr   )re   entryr   r   r   	<genexpr>X  s    z_save.<locals>.<genexpr>s   TOC rr   r   rs   N)hasattrro   ZencoderinforR   setvaluesresizer7   r8   savegetvaluerK   r&   rW   writerE   r   packsumr   )r)   r_   filenamerL   Zprovided_imagesZsize_streamsr   imagetempentriesrr   rs   rt   r   r   r   _save2  sF    

 

 
r   c             C   s   | d d t kS )Nr   )rE   )prefixr   r   r   _acceptk  s    r   z.icnsz
image/icns__main__r   z)Syntax: python3 IcnsImagePlugin.py [file]r   rbrL   zout-%s-%s-%s.pngzout.pngZwindows)*r7   osr   sysZPILr   r   r   r   Zcheck_codecr5   r   rE   r   r   r   r   r2   r<   r=   r^   r   r   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   

*
 eH9
