B
    1\              	   @   s   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G d	d
 d
ejZ	dd Z
dd Zee	je	e
 ee	je ee	jddddddg ee	jd ee	jd dS )   )Image	ImageFile    Nz0.1c             C   s  |  d}td|d }||  |d  }td|\}}}}}}}	}
}}}dg| }dg| }dg| }x8t|D ],}td|dd|  \||< ||< ||< qvW || || f}|d	kr|d d
@ dkrd}nd}n0|dkrd}n"|dkrd}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>HHIIIIIIIIHNz>BBB$      r         zI;16LLARGB   RGBA)readstructunpackunpack_fromrange)fpZhdrZlsizZsizZrsizZxsizZysizZxosizZyosizZxtsizZytsizZxtosizZytosizZcsizZssizZxrsizZyrsizisizemode r   4lib/python3.7/site-packages/PIL/Jpeg2KImagePlugin.py_parse_codestream   s,    
"


,
r   c             C   s  d}x~t d| d\}}|dkr@t d| dd }d}nd}||k rTtd|d	krn| || }P q| || tj qW |dkrtd
d}d}d}d}t|}	xt d|	d\}}|dkrt d|	dd }d}nd}|	|| }
|dkrt d|
\}}}}}}}||f}|r|dkrN|d@ dkrNd}n>|dkr^d}n.|dkrnd}n|dkr~d}n|dkrd}P q|dkrt 	d|
\}}}|dkrt 	d|
dd }|dkr|dkr|d@ dkrd}n.|dkrd}n|dkrd}n|dkrd}P q|dkrh|dkrF|d@ dkrFd}n|dkrVd}n|dkrdd}P q|dkr|dkrd}n|dkrd}P qW |dks|dkrtd||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BytesIOr   )r   headerZlboxZtboxZhlenr   r   ZbpcZncZhioZcontentZheightwidthcZunkcZiprmethZprecZapproxZcsr   r   r   _parse_jp2_header:   s    














r(   c               @   s$   e Zd ZdZdZdd Zdd ZdS )Jpeg2KImageFileZJPEG2000zJPEG 2000 (ISO 15444)c             C   sH  | j d}|dkr.d| _t| j \| _| _n:|| j d }|dkr`d| _t| j \| _| _ntd| jd ks|| jd krtdd	| _	d	| _
d
}d
}y| j  }t|j}W nj tk
r   d
}y4| j  }| j d	d | j  }| j |d	 W n tk
r   d
}Y nX Y nX dd| j d	| 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   jpeg2k)r   r   )r   r   codecr   _sizer   r(   r   r   reducelayersfilenor    fstatst_size	Exceptiontellr   tile)selfZsigfdlengthposr   r   r   _open   s:    


zJpeg2KImageFile._openc             C   s   | j rFd| j > }|d? }t| jd | | t| jd | | f| _| jr| jd }|d d | j | j|d d |d d f}|d d| j |d |fg| _tj| S )Nr   r   r   r   )r   r   r   )r0   intr   r/   r7   r1   r   load)r8   ZpowerZadjusttZt3r   r   r   r>      s    

*zJpeg2KImageFile.loadN)__name__
__module____qualname__formatZformat_descriptionr<   r>   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    rF   c             C   sF  | drd}nd}| j}|dd }|dd }|dd }|dd}|d	d }	|	d k	rt|	ttfr~td
d |	D std|dd}
|dd }|dd }|dd}|dd}|dd}d}t|dry|	 }W n t
k
r   d}Y nX |||||	|
||||||f| _t| |dd| j d|fg d S )Nz.j2kr*   r+   offsettile_offset	tile_sizequality_modeZratesquality_layersc             S   s   g | ]}t |ttfqS r   )
isinstancer=   float).0Zquality_layerr   r   r   
<listcomp>   s   z_save.<locals>.<listcomp>z,quality_layers must be a sequence of numbersnum_resolutionsr   Zcodeblock_sizeprecinct_sizeirreversibleFprogressionZLRCPcinema_modeZnor,   r2   r-   )r   r   )endswithZencoderinfogetrL   listtupleall
ValueErrorhasattrr2   r5   Zencoderconfigr   _saver   )Zimr   filenameZkindinforG   rH   rI   rJ   rK   rP   Z	cblk_sizerQ   rR   rS   rT   r9   r   r   r   r\      sN    


r\   z.jp2z.j2kz.jpcz.jpfz.jpxz.j2cz	image/jp2z	image/jpx) r   r   r   r    r"   __version__r   r(   r)   rF   r\   Zregister_openrC   Zregister_saveZregister_extensionsZregister_mimer   r   r   r   <module>   s   #`;8