3

Z4                 @   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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 eje	jd dS )   )Image	ImageFile    Nz0.1c             C   s*  | j d}tjd|d }|| j |d  }tjd|dd \}}}}}}}	}
}}}dg| }dg| }dg| }xFt|D ]:}tjd|dd	|  d
d	|   \||< ||< ||< q~W || || f}|dkr|d d@ dkrd}nd}n2|dkrd}n$|d	kr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$      '   r         zI;16LLARGB   RGBA)readstructunpackrange)fpZhdrZlsizZsizZrsizZxsizZysizZxosizZyosizZxtsizZytsizZxtosizZytosizZcsizZssizZxrsizZyrsizisizemode r   7/usr/lib/python3/dist-packages/PIL/Jpeg2KImagePlugin.py_parse_codestream   s,    
*


:

r   c             C   s  d}x~t jd| jd\}}|dkr@t jd| jdd }d}nd}||k rTtd|d	krn| j|| }P q| j|| tj qW |dkrtd
d}d}d}d}tj|}	xt jd|	jd\}}|dkrt jd|	jdd }d}nd}|	j|| }
|dkrt j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 jd|
dd \}}}|dkrt jd|
dd d }|dkr,|dkr|d@ dkrd}n.|dkr
d}n|dkrd}n|dkr(d}P q|dkrv|dkrT|d@ dkrTd}n|dkrdd}n|dkrrd}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BytesIO)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   s4  | j jd}|dkr.d| _t| j \| _| _n:|| j 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 j
 }tj|j}W nV   d}y4| j j }| j jd	d | j j }| j j|d	 W n   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   r   jpeg2kr/   r/   r/   )r   r   )r   r   codecr   r   r   r*   r    reducelayersfilenor"   fstatst_sizetellr!   tile)selfZsigfdZ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j| S )Nr   r   r   r   r   )r   r   )r1   intr   r7   r2   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    rE   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ry|j }W n   d}Y nX |||||	|
||||||f| _tj| |dd| j d|fg d S )Nz.j2kr,   r-   offsettile_offset	tile_sizequality_modeZratesquality_layersnum_resolutionsr   Zcodeblock_sizeprecinct_sizeirreversibleFprogressionZLRCPcinema_modenor   r3   r.   r/   r/   )r   r   )	endswithZencoderinfogethasattrr3   Zencoderconfigr   _saver   )Zimr   filenameZkindinforF   rG   rH   rI   rJ   rK   Z	cblk_sizerL   rM   rN   rO   r9   r   r   r   rT      sD    


rT   z.jp2z.j2kz.jpcz.jpfz.jpxz.j2cz	image/jp2z	image/jpx) r   r   r   r"   r$   __version__r   r*   r+   rE   rT   Zregister_openrB   Zregister_saveZregister_extensionsZregister_mimer   r   r   r   <module>   s   #`;1