/ lib / PIL / Jpeg2KImagePlugin.pyc
Jpeg2KImagePlugin.pyc
 1  o

 2  Y��c�*�@s�ddlZddlZddlZddlmZmZGdd�d�Zdd�Zdd	�Zd
 3  d�Z	Gdd
�d
ej�Z
 4  dd�Zdd�Ze�
e
 5  je
 6  e�e�e
 7  je�e�e
 8  jgd��e�e
 9  jd�dS)�N�)�Image�	ImageFilec@sJeZdZdZddd�Zdd�Zdd�Zd	d
10  �Zdd�Zd
d�Z	dd�Z
11  dS)�	BoxReaderz}
12      A small helper class to read fields stored in JPEG2000 header boxes
13      and to easily step into and read sub-boxes.
14      �����cCs ||_|dk|_||_d|_dS)Nrr)�fp�
15  has_length�length�remaining_in_box)�selfrr	�r��C:\Users\Jacks.GUTTSPC\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\local-packages\Python310\site-packages\PIL\Jpeg2KImagePlugin.py�__init__s
16  
17  zBoxReader.__init__cCs6|jr|j��||jkrdS|jdkr||jkSdS)NFrT)rr�tellr	r
18  )r�	num_bytesrrr
�	_can_read#s
19  
20  
21  zBoxReader._can_readcCsh|�|�sd}t|��|j�|�}t|�|kr&d|�dt|��d�}t|��|jdkr2|j|8_|S)NzNot enough data in headerzExpected to read z bytes but only got �.r)r�SyntaxErrorr�read�len�OSErrorr
22  )rr�msg�datarrr
�_read_bytes-s
23  
24  zBoxReader._read_bytescCs t�|�}|�|�}t�||�S�N)�struct�calcsizer�unpack)rZfield_format�sizerrrr
�read_fields;s
25  
26  zBoxReader.read_fieldscCs |j}|�|�}tt�|�|�Sr)r
27  rr�io�BytesIO)rrrrrr
�
28  read_boxes@s
29  zBoxReader.read_boxescCs |jr|j��|j|jkSdS)NT)rrrr
30  r	�rrrr
�has_next_boxEszBoxReader.has_next_boxcCs�|jdkr|j�|jtj�d|_|�d�\}}|dkr&|�d�d}d}nd}||ks3|�||�s9d}t|��|||_|S)	Nrrz>I4srz>Q��zInvalid header length)r
31  r�seek�os�SEEK_CURrrr)rZlbox�tbox�hlenrrrr
�
next_box_typeKs
32  
33  zBoxReader.next_box_typeN)r)�__name__�
34  __module__�__qualname__�__doc__rrrrr"r$r,rrrr
rs
35  
36  rcCs*|�d�}t�d|�d}||�|d�}t�d|�\}}}}}}}	}	}	}	}
37  dg|
38  }dg|
39  }dg|
40  }
t|
41  �D]}t�d|dd|�\||<||<|
|<q:||||f}|
42  d	krq|
dd
43  @dkrkd}||fSd
}||fS|
44  dkr{d}||fS|
45  dkr�d}||fS|
46  dkr�d}||fSd}||fS)z�Parse the JPEG 2000 codestream to extract the size and component
47      count from the SIZ marker segment, returning a PIL (size, mode) tuple.�z>Hrz>HHIIIIIIIIHNz>BBB�$�r�r&�I;16�L�LA�RGB��RGBA)rrr�unpack_from�range)r�hdrZlsizZsizZrsizZxsizZysizZxosizZyosiz�_ZcsizZssizZxrsizZyrsiz�ir�moderrr
�_parse_codestreamas:
48  �
49  
50  
51  *�
52  ����rAcCs$|dkrd|d|d|SdS)z�Convert JPEG2000's (numerator, denominator, exponent-base-10) resolution,
53      calculated as (num / denom) * 10^exp and stored in dots per meter,
54      to floating-point dots per inch.r���
55  i'Nr)�num�denom�exprrr
�_res_to_dpi�s�rGcCs�t|�}d}d}|��r,|��}|dkr|��}n|dkr(|�d�ddkr(d}|��sd}d}d}d}d}	|��r�|��}|dkrx|�d	�\}
56  }}}||
57  f}|d
58  kr\|d@dkr\d
}nX|d
59  krcd}nQ|dkrjd}nJ|dkrqd}nC|dkrwd}n<|dkr�|��}|��r�|��}
|
dkr�|�d�\}}}}}}t|||�}t|||�}|dur�|dur�||f}	n|��s�|��s:|dus�|dur�d}t|��||||	fS)z�Parse the JP2 header box to extract size, component count,
60      color space information, and optionally DPI information,
61      returning a (size, mode, mimetype, dpi) tuple.Nsjp2hsftypz>4srsjpx z	image/jpxsihdrz>IIHBrr4r&r5r6r1r7r3r8r9r:sres srescz>HHHHBBzMalformed JP2 header)rr$r,r"rrGr)r�reader�header�mimetyper*rr@�bpc�nc�dpi�height�width�resZtresZvrcnZvrcdZhrcnZhrcdZvrceZhrceZhresZvresrrrr
�_parse_jp2_header�sd�
62  ���rQcsFeZdZdZdZdd�Ze�fdd��Zejdd��Zdd	�Z	�Z
63  S)
64  �Jpeg2KImageFileZJPEG2000zJPEG 2000 (ISO 15444)cCsd|j�d�}|dkrd|_t|j�\|_|_n-||j�d�}|dkr>d|_t|j�}|\|_|_|_}|dur=||jd<nd}t	|��|j
65  dusN|jdurTd	}t	|��d
66  |_d
67  |_d}d}z
|j�
�}t�|�j}Wn1ty�d}z|j��}|j�d
68  tj�|j��}|j�|�Wnty�d}YnwYnwdd
|j
69  d
70  |j|j|j||ffg|_dS)Nr9��O�Q�j2kr&�jP  
7172  �jp2rMznot a JPEG 2000 filezunable to determine size/moderr�jpeg2k�rr)rr�codecrA�_sizer@rQ�custom_mimetype�inforr�_reduce�layers�filenor(�fstat�st_size�	Exceptionrr'r �SEEK_END�tile)r�sigrIrMr�fdr	�posrrr
�_open�sT
73  
74  �
75  
76  
77  ����
78  �zJpeg2KImageFile._opencs|jpt�jSr)r]�super�reducer#��	__class__rr
rjszJpeg2KImageFile.reducecCs
79  ||_dSr)r])r�valuerrr
rjs
80  cCs�|jrO|jrOd|j>}|d?}t|jd||�t|jd||�f|_|jd}|dd|j|j|dd|ddf}|dd|j|d|fg|_tj�|�S)Nrrr3r9rXr1)rdr]�intrrZr^r�load)r�power�adjust�t�t3rrr
ros
81  �
82  *zJpeg2KImageFile.load)r-r.r/�format�format_descriptionrh�propertyrj�setterro�
__classcell__rrrkr
rR�s2
83  rRcCs |dd�dkp|dd�dkS)Nr9rS�rUr)�prefixrrr
�_accepts�r{cCsl|j}|�d�s|�dd�rd}nd}|�dd�}|�dd�}|�dd�}|�d	d
84  �}|�dd�}	|	durKt|	ttf�rEtdd
�|	D��sKd}
85  t|
86  ��|�dd�}|�dd�}|�dd�}
|�dd�}|�dd�}|�dd�}|�dd�}|�dd�}d}t|d�r�z|�	�}Wnt
87  y�d}Ynw|||||	|||
||||||f|_t�
||dd|jd|fg�dS)N�.j2kZno_jp2FrTrV�offset�tile_offset�	tile_size�quality_modeZrates�quality_layerscSsg|]	}t|ttf��qSr)�
88  isinstancern�float)�.0Z
quality_layerrrr
�
89  <listcomp>9s��z_save.<locals>.<listcomp>z,quality_layers must be a sequence of numbers�num_resolutionsrZcodeblock_size�
precinct_size�irreversible�progressionZLRCP�cinema_mode�no�mct�signedrr_rWrX)�encoderinfo�endswith�getr��list�tuple�all�
90  ValueError�hasattrr_rb�
encoderconfigr�_saver)�imr�filenamer\�kindr}r~rr�r�rr�Z	cblk_sizer�r�r�r�r�r�rfrrr
r�(sf����	
91  ��"r�)z.jp2r|z.jpcz.jpfz.jpxz.j2cz	image/jp2)r r(r�rrrrArGrQrRr{r��
register_openrt�
register_save�register_extensions�
register_mimerrrr
�<module>s"J"@RB
92  �