
 X)                 @   sA  d  d l  m Z m Z m Z m Z d  d l Z d  d l Z d  d l Z d  d l Z d  d l	 Z	 d  d l
 Z
 e e j d  Z e r d  d l  m Z n  e j Z d Z d d   Z d d	   Z d
 d   Z d d   Z d d   Z Gd d   d e  Z Gd d   d e j  Z d d   Z e j e j e d d    e j e j d  e	 j d k re j e j e  e j e j d  n  e  d k r=e e! e	 j" d d   Z# xB e# j$ d D]3 Z% e% e# _% e# j&   e# j' Z' e' j( d e%  qWe j! e! e	 j" d d   Z' e' j( d   e	 j d! k r=e j) d   q=n  d S)"    )Image	ImageFilePngImagePlugin_binaryNZjp2klib_version)Jpeg2KImagePlugin   c             C   s   t  j d |  j t   S)Nz>4sI)structunpackread
HEADERSIZE)fobj r   P/home/ubuntu/projects/ifolica/lib/python3.4/site-packages/PIL/IcnsImagePlugin.py
nextheader#   s    r   c             C   sa   | \ } } |  j  |  |  j d  } | d k rC t d   n  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   s  | \ } } |  j  |  | d | d | d | d f } | d | d } | | d k r |  j |  } t j d | | d d d d  } nSt j d | d  } x;t d  D]-}	 g  }
 | } x | d k r|  j d  } | s Pn  t |  } | d @rD| d	 } |  j d  } xD t |  D] } |
 j |  q*Wn  | d } |
 j |  j |   | | 8} | d k r Pq q W| d k rt d
 |   n  t j d | d j	 |
  d d d d  } | j
 j | j
 |	  q Wi | d 6S)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 [%r left]L    )r   r
   r   
frombuffernewrangei8appendr   joinimZputband)r   r   r   r   r   
pixel_sizesizesqZindatar)   Zband_ixdataZ	bytesleftZbyte	blocksizeibandr   r   r   r   1   sB    $$



$r   c             C   s   | d } |  j  |  | d | d | d | d f } | d | d } t j d | |  j |  d d d d  } i | d 6S)Nr   r   r   r!   r   A)r   r   r#   r
   )r   r   r   r   r*   r+   r/   r   r   r   read_mk_   s    
$$r1   c       	      C   s(  | \ } } |  j  |  |  j d  } | d  d  d k re |  j  |  t j |   } i | d 6S| d  d  d k s | d  d  d k s | d k rt s t d	   n  |  j  |  |  j |  } t j |  } t j	 |  } | j
 d k r| j d  } n  i | d 6St 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PngImageFileenable_jpeg2k
ValueErrorioBytesIOr   ZJpeg2KImageFilemodeconvert)	r   r   r   r   r   r   r)   Z
jp2kstreamfr   r   r   read_png_or_jpeg2000k   s(    r;   c               @   sT  e  Z d  Z i d e f g d( 6d e f g d) 6d e f g d* 6d e f g d+ 6d	 e f g d, 6d e f d e f d e f g d- 6d e f g d. 6d e f g d/ 6d e f d e f g d0 6d e f d e f d e f g d1 6d e f g d2 6d e f d e f d e f g d3 6Z d d   Z d d    Z	 d! d"   Z
 d# d$   Z d% d& d'  Z d% S)4IcnsFiles   ic10   r   s   ic09r   s   ic14   s   ic08s   ic13r   s   ic07s   it32s   t8mks   icp6@   s   ic12    s   ih32s   h8mk0   s   icp5s   il32s   l8mks   ic11   s   icp4s   is32s   s8mkc             C   s   i  |  _  } | |  _ t |  \ } } | d k rC t d   n  t } x{ | | k  r t |  \ } } | d k r t d   n  | t 7} | t 8} | | f | | <| j | d  | | 7} qL Wd S)z@
        fobj is a file-like object as an icns resource
        s   icnsznot an icns filer   zinvalid block headerr   N)dctr   r   r   r   r   )selfr   rC   r   filesizer.   r-   r   r   r   __init__   s    	

zIcnsFile.__init__c             C   sa   g  } xT |  j  j   D]C \ } } x4 | D], \ } } | |  j k r) | j |  Pq) q) Wq W| S)N)SIZESitemsrC   r'   )rD   sizesr   Zfmtsfmtreaderr   r   r   	itersizes   s    zIcnsFile.itersizesc             C   s+   |  j    } | s! t d   n  t |  S)NzNo 32bit icon resources found)rL   r   max)rD   rI   r   r   r   bestsize   s    zIcnsFile.bestsizec             C   se   i  } xX |  j  | D]I \ } } |  j j |  } | d k	 r | j | |  j | |   q 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)rG   rC   getupdater   )rD   r   rC   coderK   descr   r   r   dataforsize   s    #zIcnsFile.dataforsizeNc             C   s   | d  k r |  j    } n  t |  d k rG | d | d d f } n  |  j |  } | j d d   } | rr | S| j d  j   } y | j | d  Wn t k
 r Yn X| S)Nr   r   r   r3   r   r0   )rN   lenrS   rO   copyZputalphaKeyError)rD   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   )r@   r@   r   )rA   rA   r   )r@   r@   r   )rB   rB   r   )rB   rB   r   )__name__
__module____qualname__r;   r   r1   r   rG   rF   rL   rN   rS   rW   r   r   r   r   r<      s2   								r<   c               @   s:   e  Z d  Z d Z d Z d Z 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 d |  j d |  j d f |  _ |  j j   |  j d <d |  _	 d  S)Nr3   r   r   r   rI    )r\   )
r<   fpicnsr8   rN   	best_sizer   rL   infotile)rD   r   r   r   _open
  s    	zIcnsImageFile._openc             C   s   t  |  j  d k rW |  j |  _ |  j d |  j d |  j d |  j d f |  _ n  t j j |   |  j st d  S|  j   |  j j |  j  } | j   | j	 |  _	 | j
 |  _
 | j |  _ d  |  _ d  |  _ f  |  _ |  j   d  S)Nr   r   r   r   )rT   r   r_   r   loadra   Zload_preparer^   rW   r)   r8   r]   Zload_end)rD   r)   r   r   r   rc     s"    !	

			zIcnsImageFile.loadN)rX   rY   rZ   __doc__formatZformat_descriptionrb   rc   r   r   r   r   r[      s
   	
r[   c             C   s  t  | d  r | j   n  t j d  } d } d } x d d d d d g D] } d	 j | |  } | | k rz | } n |  j | | f t j  } | j t	 j
 j | | d
   |  j | d | d f t j  } | j t	 j
 j | | d   | } qM Wd d l m }	 m }
 m } d d d d | | g } t j   } |	 | d |
 d | } | j j   | j   } t j |  | r| | |   n  d S)z
    Saves the image as a series of PNG files,
    that are then converted to a .icns file
    using the macOS command line utility 'iconutil'.

    macOS only.
    flushz.iconsetNrB   r@   r   r>   i   z
icon_{}x{}z.pngr   z@2x.pngr   )PopenPIPECalledProcessErrorZiconutilz-cr^   z-ostdoutstderr)hasattrrf   tempfilemkdtempre   Zresizer   ZLANCZOSsaveospathr(   
subprocessrg   rh   ri   TemporaryFilerj   closewaitshutilrmtree)r)   r]   filenameZiconsetZlast_wZlast_imwprefixZ	im_scaledrg   rh   ri   Zconvert_cmdrk   Zconvert_procretcoder   r   r   _save-  s.    	 # 
r|   c             C   s   |  d  d  d k S)Nr   s   icnsr   )xr   r   r   <lambda>[  s    r~   z.icnsdarwinz
image/icns__main__r   rbrI   zout-%s-%s-%s.pngzout.pngZwindows)*ZPILr   r   r   r   r6   rp   rv   r   sysrm   rl   corer4   r   r&   r   r   r   r   r1   r;   objectr<   r[   r|   Zregister_openre   Zregister_extensionplatformZregister_saveZregister_mimerX   openargvZimfr`   r   rc   r)   ro   Z	startfiler   r   r   r   <module>   sH   "	
.w1-	
	