
4ec           @   s   d  d l  Z  d  d l Z d  d l Z d d l m Z m 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 d d d d d g  e j e	 j d  d S(   iNi   (   t   Imaget	   ImageFiles   0.1c         C   st  |  j  d  } t j d |  d } | |  j  | d  } t j d |  \ } } } } } } }	 }	 }	 }	 }
 d g |
 } d g |
 } d g |
 } xF t |
  D]8 } t j d | d d |  \ | | <| | <| | <q W| | | | f } |
 d k r%| d d	 @d
 k rd } qjd } nE |
 d k r:d } n0 |
 d k rOd } n |
 d k rd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   >HHIIIIIIIIHs   >BBBi$   i   i   i   i   s   I;16t   Lt   LAt   RGBi   t   RGBAN(   t   readt   structt   unpackt   unpack_fromt   Nonet   range(   t   fpt   hdrt   lsizt   sizt   rsizt   xsizt   ysizt   xosizt   yosizt   _t   csizt   ssizt   xrsizt   yrsizt   it   sizet   mode(    (    s?   /usr/local/lib/python2.7/dist-packages/PIL/Jpeg2KImagePlugin.pyt   _parse_codestream   s.    -6					c         C   s&  d } d } xt rt j d |  j d   \ } } | d k rj t j d |  j d   d } d } n d } | | k  r t d   n  | d k r |  j | |  } Pq | d	 k r |  j d
  d k r d } n  |  j | | d
 t j  q |  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 rt j d |
 j d   d } d } n d } |
 j | |  } | d k rt j d |  \ } } }	 } } } } | | f } | r|	 d k r4| d @d k r4d } nT |	 d k rId } n? |	 d k r^d } n* |	 d k rsd } n |	 d
 k rd } n  PqqV| d k rVt j d |  \ } } } | d k rt j d | d  d } | d k rO|	 d k r| d @d k rd } n? |	 d k r!d } n* |	 d k r6d } n |	 d
 k rKd } n  Pq| d k r|	 d k r| d @d k rd } n* |	 d k rd } n |	 d k rd } n  Pq| d k r|	 d k rd } n |	 d
 k rd } n  PqqqVqV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 (size, mode, mimetype) tuple.s   >I4si   i   s   >Qi    i   s   Invalid JP2 header lengtht   jp2ht   ftypi   s   jpx s	   image/jpxs   could not find JP2 headert   ihdrs   >IIHBBBBi   s   I;16R   i   R   i   R   R   t   colrs   >BBBs   >Ii   i   s   Malformed jp2 headerN(   R
   t   TrueR   R   R   t   SyntaxErrort   seekt   ost   SEEK_CURt   iot   BytesIOR	   (   R   t   headert   mimetypet   lboxt   tboxt   hlenR   R   t   bpct   nct   hiot   contentt   heightt   widtht   ct   unkct   iprt   metht   prect   approxt   cs(    (    s?   /usr/local/lib/python2.7/dist-packages/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   \ |  _ |  _ na | |  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 } Wny t k
 rd
 } yH |  j  j   } |  j  j d	 t j  |  j  j   } |  j  j |  Wqt k
 rd
 } qXn Xd d |  j	 d	 |  j |  j |  j | | f f g |  _ d  S(   Ni   s   OQt   j2ki   s      jP  

t   jp2s   not a JPEG 2000 files   unable to determine size/modei    it   jpeg2k(   i    i    (   R   R   t   codecR   t   _sizeR   R;   t   custom_mimetypeR#   R   R
   t   reducet   layerst   filenoR%   t   fstatt   st_sizet	   Exceptiont   tellR$   R'   t   SEEK_ENDt   tile(   t   selft   sigR)   t   fdt   lengtht   pos(    (    s?   /usr/local/lib/python2.7/dist-packages/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    (   RD   t   intR   RB   RL   RE   R   t   load(   RM   t   powert   adjustt   tt   t3(    (    s?   /usr/local/lib/python2.7/dist-packages/PIL/Jpeg2KImagePlugin.pyRT      s    	
$	3*(   t   __name__t
   __module__t   formatt   format_descriptionRR   RT   (    (    (    s?   /usr/local/lib/python2.7/dist-packages/PIL/Jpeg2KImagePlugin.pyR<      s   	.c         C   s   |  d  d k p |  d  d k S(   Ni   s   OQi   s      jP  

(    (   t   prefix(    (    s?   /usr/local/lib/python2.7/dist-packages/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   }	 |	 d  k	 r t |	 t t f  o t g  |	 D] }
 t |
 t t	 f  ^ q  r t
 d
   n  | 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t k
 r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_layerss,   quality_layers must be a sequence of numberst   num_resolutionsi    t   codeblock_sizet   precinct_sizet   irreversiblet   progressiont   LRCPt   cinema_modet   noiRF   R@   (   i    i    (   t   endswitht   encoderinfot   getR
   t
   isinstancet   listt   tuplet   allRS   t   floatt
   ValueErrort   Falset   hasattrRF   RI   t   encoderconfigR   t   _saveR   (   t   imR   t   filenamet   kindt   infoR_   R`   Ra   Rb   Rd   t   quality_layerRe   t	   cblk_sizeRg   Rh   Ri   Rk   RO   (    (    s?   /usr/local/lib/python2.7/dist-packages/PIL/Jpeg2KImagePlugin.pyRy      sP    		)s   .jp2s   .j2ks   .jpcs   .jpfs   .jpxs   .j2cs	   image/jp2(   R'   R%   R   t    R    R   t   __version__R   R;   R<   R^   Ry   t   register_openR[   t   register_savet   register_extensionst   register_mime(    (    (    s?   /usr/local/lib/python2.7/dist-packages/PIL/Jpeg2KImagePlugin.pyt   <module>   s   	"	eD		=