
 X0                 @   sN  d  d l  m Z m Z d  d l Z d  d l Z d  d l Z d Z d d   Z d d   Z Gd d	   d	 e j  Z	 d
 d   Z
 d 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)    )Image	ImageFileNz0.1c             C   s  |  j  d  } t j d |  d } | |  j  | d  } t j d | d d   \ } } } } } } }	 }
 } } } d g | } d g | } d g | } xU t |  D]G } t j d | d d	 | d
 d	 |   \ | | <| | <| | <q W| | | | f } | d k r>| d d @d k r5d } qd } nE | d k rSd } n0 | d	 k rhd } n | d k r}d } n d } | | f S)zParse the JPEG 2000 codestream to extract the size and component
    count from the SIZ marker segment, returning a PIL (size, mode) tuple.   z>Hr   z>HHIIIIIIIIHN&   z>BBB$      '            zI;16LLARGB   RGBA)readstructunpackrange)fphdrZlsizZsizZrsizZxsizZysizZxosizZyosizZxtsizZytsizZxtosizZytosizZcsizZssizZxrsizZyrsizisizemode r   R/home/ubuntu/projects/ifolica/lib/python3.4/site-packages/PIL/Jpeg2KImagePlugin.py_parse_codestream   s,    =E					r   c             C   s  d } x t  j d |  j d   \ } } | d k r^ 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  j d |	 j d   \ } } | d k rWt  j d |	 j d   d } d } n d } |	 j | |  }
 | d k r5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   \ } } } | 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 re| d k r7| d @d k r7d } n* | d k rLd } n | d k ra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)z~Parse the JP2 header box to extract size, component count and
    color space information, returning a PIL (size, mode) tuple.Nz>I4sr   r	   z>Qr      zInvalid JP2 header lengths   jp2hzcould not find JP2 headers   ihdrz>IIHBBBBr
   zI;16r   r   r   r   r   r   r   s   colrz>BBBz>I         zMalformed jp2 header)	r   r   r   SyntaxErrorseekosSEEK_CURioBytesIO)r   headerZlboxZtboxZhlenr   r   ZbpcZncZhiocontentheightwidthcZunkcZiprmethZprecZapproxcsr   r   r   _parse_jp2_header:   s    !	!	'					% 									r.   c               @   s4   e  Z d  Z d Z d Z d d   Z d d   Z d S)Jpeg2KImageFileZJPEG2000z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 } Wng d } yH |  j  j   } |  j  j d	 d  |  j  j   } |  j  j | d	  Wn d } Yn XYn Xd d |  j d	 |  j |  j |  j	 | | |  j  f f g |  _ d  S)Nr   s   OQj2kr   s      jP  

jp2znot a JPEG 2000 filezunable to determine size/moder   r	   r   jpeg2kr3   r3   r3   )r   r   )r   r   codecr   r   r   r.   r!   reducelayersfilenor#   fstatst_sizetellr"   tile)selfsigfdlengthposr   r   r   _open   s:    				zJpeg2KImageFile._openc             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)Nr	   r   r   r   r   )r   r   )r5   intr   r;   r6   r   load)r<   poweradjusttZt3r   r   r   rC      s    	
$	3*zJpeg2KImageFile.loadN)__name__
__module____qualname__formatZformat_descriptionrA   rC   r   r   r   r   r/      s   'r/   c             C   s*   |  d  d  d k p) |  d  d  d k S)Nr   s   OQ   s      jP  

r   )prefixr   r   r   _accept   s    rM   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 d  } | j d d  } | j d d  } d } t | d  r&y | j   } Wq&d } Yq&Xn  | | | | |	 |
 | | | | | | f |  _ t j |  | d d |  j d | f g  d  S)Nz.j2kr0   r1   offsettile_offset	tile_sizequality_modeZratesquality_layersnum_resolutionsr   Zcodeblock_sizeprecinct_sizeirreversibleFprogressionZLRCPcinema_modenor	   r7   r2   r3   r3   )r   r   )	endswithZencoderinfogethasattrr7   Zencoderconfigr   _saver   )Zimr   filenamekindinforN   rO   rP   rQ   rR   rS   Z	cblk_sizerT   rU   rV   rW   r>   r   r   r   r\      sD    		r\   z.jp2z.j2kz.jpcz.jpfz.jpxz.j2cz	image/jp2z	image/jpx)ZPILr   r   r   r#   r%   __version__r   r.   r/   rM   r\   Zregister_openrJ   Zregister_saveZregister_extensionZregister_mimer   r   r   r   <module>   s&   #`;0