ó
O'—^c           @   sB  d  d l  m Z m Z d  d l Z d  d l Z d  d l Z d Z d „  Z d „  Z d e j f d „  ƒ  YZ	 d „  Z
 d	 „  Z e j e	 j e	 e
 ƒ e j e	 j e ƒ e j e	 j d
 ƒ e j e	 j d ƒ e j e	 j d ƒ e j e	 j d ƒ e j e	 j d ƒ e j e	 j d ƒ e j e	 j d ƒ e j e	 j d ƒ d S(   iÿÿÿÿ(   t   Imaget	   ImageFileNs   0.1c         C   s„  |  j  d ƒ } t j d | ƒ d } | |  j  | d ƒ } t j d | d  ƒ \ } } } } } } }	 }
 } } } d g | } d g | } d g | } xR t | ƒ D]D } t j d | d d | d	 d | !ƒ \ | | <| | <| | <q§ W| | | | f } | d
 k r5| d d @d k r,d } qzd } nE | d k rJd } n0 | d k r_d } n | d k rtd } n d } | | f S(   s‹   Parse the JPEG 2000 codestream to extract the size and component
    count from the SIZ marker segment, returning a PIL (size, mode) tuple.i   s   >Hi    s   >HHIIIIIIIIHi&   s   >BBBi$   i   i'   i   i   i   s   I;16t   Lt   LAt   RGBi   t   RGBAN(   t   readt   structt   unpackt   Nonet   range(   t   fpt   hdrt   lsizt   sizt   rsizt   xsizt   ysizt   xosizt   yosizt   xtsizt   ytsizt   xtosizt   ytosizt   csizt   ssizt   xrsizt   yrsizt   it   sizet   mode(    (    s7   /tmp/pip-unpacked-wheel-ivxKtu/PIL/Jpeg2KImagePlugin.pyt   _parse_codestream   s,    7B					c         C   sÝ  d } xº t rÂ t j d |  j d ƒ ƒ \ } } | d k rd t j d |  j d ƒ ƒ d } d } n d } | | k  r… t d ƒ ‚ n  | d k r¨ |  j | | ƒ } Pq	 |  j | | t j ƒ q	 W| d k rÞ t d	 ƒ ‚ n  d } d } d } d } t	 j
 | ƒ }	 x¤t r«t j d |	 j d ƒ ƒ \ } } | d k rct j d |	 j d ƒ ƒ d } d } n d } |	 j | | ƒ }
 | d
 k rAt j d |
 ƒ \ } } } } } } } | | f } | r¨| d k ræ| d @d k ræd } nT | d k rûd } n? | d k rd } n* | d k r%d } n | d k r:d } n  Pq¨q| d k rt j d |
 d  ƒ \ } } } | d k r¨t j d |
 d d !ƒ d } | d k r	| d k rÆ| d @d k rÆd } n? | d k rÛd } n* | d k rðd } n | d k rd } n  Pq¥| d k rh| d k r:| d @d k r:d } n* | d k rOd } n | d k rdd } n  Pq¥| d k r¥| d k r‰d } n | d k ržd } n  Pq¥q¨qqW| d k sÄ| d k rÓt d ƒ ‚ n  | | f S(   s~   Parse the JP2 header box to extract size, component count and
    color space information, returning a PIL (size, mode) tuple.s   >I4si   i   s   >Qi    i   s   Invalid JP2 header lengtht   jp2hs   could not find JP2 headert   ihdrs   >IIHBBBBi   s   I;16R   i   R   i   R   i   R   t   colrs   >BBBs   >Ii   i   i   s   Malformed jp2 headerN(   R	   t   TrueR   R   R   t   SyntaxErrort   seekt   ost   SEEK_CURt   iot   BytesIO(   R   t   headert   lboxt   tboxt   hlenR   R   t   bpct   nct   hiot   contentt   heightt   widtht   ct   unkct   iprt   metht   prect   approxt   cs(    (    s7   /tmp/pip-unpacked-wheel-ivxKtu/PIL/Jpeg2KImagePlugin.pyt   _parse_jp2_header:   s’    	!		!	'														t   Jpeg2KImageFilec           B   s&   e  Z d  Z d Z d „  Z d „  Z RS(   t   JPEG2000s   JPEG 2000 (ISO 15444)c      	   C   s³  |  j  j d ƒ } | d k rE d |  _ t |  j  ƒ \ |  _ |  _ nU | |  j  j d ƒ } | d k rŽ d |  _ t |  j  ƒ \ |  _ |  _ n t d ƒ ‚ |  j d  k s¸ |  j d  k rÇ t d ƒ ‚ n  d	 |  _	 d	 |  _
 d
 } d
 } y% |  j  j ƒ  } t j | ƒ j } Wne d
 } yH |  j  j ƒ  } |  j  j d	 d ƒ |  j  j ƒ  } |  j  j | d	 ƒ Wqrd
 } qrXn Xd d |  j d	 |  j |  j	 |  j
 | | |  j  f f g |  _ d  S(   Ni   s   ÿOÿQt   j2ki   s      jP  
‡
t   jp2s   not a JPEG 2000 files   unable to determine size/modei    iÿÿÿÿi   t   jpeg2k(   i    i    (   R   R   t   codecR   R   R   R;   R$   R	   t   reducet   layerst   filenoR&   t   fstatt   st_sizet   tellR%   t   tile(   t   selft   sigt   fdt   lengtht   pos(    (    s7   /tmp/pip-unpacked-wheel-ivxKtu/PIL/Jpeg2KImagePlugin.pyt   _openž   s:    				c         C   sß   |  j  r\ d |  j  >} | d ?} t |  j d | | ƒ t |  j d | | ƒ f |  _ n  |  j rÏ |  j d } | d d |  j  |  j | d d | d d f } | d d |  j | d | f g |  _ n  t j j |  ƒ S(   Ni   i    i   i   i   (   i    i    (   RB   t   intR   RH   RC   R   t   load(   RI   t   powert   adjustt   tt   t3(    (    s7   /tmp/pip-unpacked-wheel-ivxKtu/PIL/Jpeg2KImagePlugin.pyRP   Å   s    	
$	3*(   t   __name__t
   __module__t   formatt   format_descriptionRN   RP   (    (    (    s7   /tmp/pip-unpacked-wheel-ivxKtu/PIL/Jpeg2KImagePlugin.pyR<   š   s   	'c         C   s   |  d  d k p |  d  d k S(   Ni   s   ÿOÿQi   s      jP  
‡
(    (   t   prefix(    (    s7   /tmp/pip-unpacked-wheel-ivxKtu/PIL/Jpeg2KImagePlugin.pyt   _acceptÕ   s    c         C   s  | j  d ƒ r d } n d } |  j } | j d d  ƒ } | j d d  ƒ } | j d d  ƒ } | j d d ƒ } | j d	 d  ƒ }	 | j d
 d ƒ }
 | j d d  ƒ } | j d d  ƒ } | j d t ƒ } | j d d ƒ } | j d d ƒ } d } t | d ƒ r%y | j ƒ  } Wq%d } q%Xn  | | | | |	 |
 | | | | | | f |  _ t j	 |  | d d |  j
 d | f g ƒ d  S(   Ns   .j2kR>   R?   t   offsett   tile_offsett	   tile_sizet   quality_modet   ratest   quality_layerst   num_resolutionsi    t   codeblock_sizet   precinct_sizet   irreversiblet   progressiont   LRCPt   cinema_modet   noiÿÿÿÿRD   R@   (   i    i    (   t   endswitht   encoderinfot   getR	   t   Falset   hasattrRD   t   encoderconfigR   t   _saveR   (   t   imR   t   filenamet   kindt   infoR[   R\   R]   R^   R`   Ra   t	   cblk_sizeRc   Rd   Re   Rg   RK   (    (    s7   /tmp/pip-unpacked-wheel-ivxKtu/PIL/Jpeg2KImagePlugin.pyRo   Ý   sD    		s   .jp2s   .j2ks   .jpcs   .jpfs   .jpxs   .j2cs	   image/jp2s	   image/jpx(   t   PILR    R   R   R&   R(   t   __version__R   R;   R<   RZ   Ro   t   register_openRW   t   register_savet   register_extensiont   register_mime(    (    (    s7   /tmp/pip-unpacked-wheel-ivxKtu/PIL/Jpeg2KImagePlugin.pyt   <module>   s&   	#	`;		0