o
    »ÙøiG8  ã                   @  sü   d dl mZ d dlZd dlZd dlZd dlmZ ddlmZm	Z	m
Z
mZ dZer4d dlmZ d dlmZ G d	d
„ d
ƒZd+dd„Zd,dd„Zd-dd„ZG dd„ de	j	ƒZd.d d!„Zd/d'd(„Ze ejee¡ e eje¡ e ejg d)¢¡ e ejd*¡ dS )0é    )ÚannotationsN)Úcasté   )ÚImageÚ	ImageFileÚImagePaletteÚ_binaryF)ÚCallable)ÚIOc                   @  sX   e Zd ZdZddd	d
„Zd dd„Zd!dd„Zd"dd„Zd#dd„Zd$dd„Z	d%dd„Z
dS )&Ú	BoxReaderz}
    A small helper class to read fields stored in JPEG2000 header boxes
    and to easily step into and read sub-boxes.
    éÿÿÿÿÚfpú	IO[bytes]ÚlengthÚintÚreturnÚNonec                 C  s    || _ |dk| _|| _d| _d S )Nr   r   )r   Ú
has_lengthr   Úremaining_in_box)Úselfr   r   © r   úb/home/develop/edictos_py/central_edictos/env/lib/python3.10/site-packages/PIL/Jpeg2KImagePlugin.pyÚ__init__%   s   

zBoxReader.__init__Ú	num_bytesÚboolc                 C  s6   | j r| j ¡ | | jkrdS | jdkr|| jkS dS )NFr   T)r   r   Útellr   r   )r   r   r   r   r   Ú	_can_read+   s
   

zBoxReader._can_readÚbytesc                 C  sh   |   |¡sd}t|ƒ‚| j |¡}t|ƒ|k r&d|› dt|ƒ› d�}t|ƒ‚| jdkr2|  j|8  _|S )NzNot enough data in headerzExpected to read z bytes but only got Ú.r   )r   ÚSyntaxErrorr   ÚreadÚlenÚOSErrorr   )r   r   ÚmsgÚdatar   r   r   Ú_read_bytes5   s   

zBoxReader._read_bytesÚfield_formatÚstrútuple[int | bytes, ...]c                 C  s    t  |¡}|  |¡}t  ||¡S ©N)ÚstructÚcalcsizer%   Úunpack)r   r&   Úsizer$   r   r   r   Úread_fieldsC   s   

zBoxReader.read_fieldsc                 C  s    | j }|  |¡}tt |¡|ƒS r)   )r   r%   r   ÚioÚBytesIO)r   r-   r$   r   r   r   Ú
read_boxesH   s   
zBoxReader.read_boxesc                 C  s    | j r| j ¡ | j | jk S dS )NT)r   r   r   r   r   ©r   r   r   r   Úhas_next_boxM   s   zBoxReader.has_next_boxc                 C  s”   | j dkr| j | j tj¡ d| _ ttttf |  	d¡ƒ\}}|dkr0tt|  	d¡d ƒ}d}nd}||k s=|  
|| ¡sCd}t|ƒ‚|| | _ |S )	Nr   r   z>I4sr   z>Qé   é   zInvalid header length)r   r   ÚseekÚosÚSEEK_CURr   Útupler   r   r.   r   r   )r   ÚlboxÚtboxÚhlenr#   r   r   r   Únext_box_typeS   s   

zBoxReader.next_box_typeN)r   )r   r   r   r   r   r   )r   r   r   r   )r   r   r   r   )r&   r'   r   r(   )r   r   )r   r   )r   r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r%   r.   r1   r3   r=   r   r   r   r   r      s    





r   r   r   r   útuple[tuple[int, int], str]c                 C  sâ   |   d¡}t |¡}||   |d ¡ }t d|¡\}}}}}}}	}	}	}	}
|| || f}|
dkrMt d|d¡}|d d@ d dkrGd	}||fS d
}||fS |
dkrWd}||fS |
dkrad}||fS |
dkrkd}||fS d}t|ƒ‚)z‹Parse the JPEG 2000 codestream to extract the size and component
    count from the SIZ marker segment, returning a PIL (size, mode) tuple.é   z>HHIIIIIIIIHr   z>Bé&   r   é   r5   úI;16ÚLÚLAé   ÚRGBé   ÚRGBAz"unable to determine J2K image mode)r    r   Úi16ber*   Úunpack_fromr   )r   ÚhdrÚlsizÚsizÚrsizÚxsizÚysizÚxosizÚyosizÚ_Úcsizr-   ÚssizÚmoder#   r   r   r   Ú_parse_codestreami   s2   

ÿõö	øúýr[   Únumr   ÚdenomÚexpúfloat | Nonec                 C  s$   |dkrdS d|  d|  d|  S )zµConvert JPEG2000's (numerator, denominator, exponent-base-10) resolution,
    calculated as (num / denom) * 10^exp and stored in dots per meter,
    to floating-point dots per inch.r   Néþ   é
   i'  r   )r\   r]   r^   r   r   r   Ú_res_to_dpiˆ   s   rb   úetuple[tuple[int, int], str, str | None, tuple[float, float] | None, ImagePalette.ImagePalette | None]c           $      C  sÔ  t | ƒ}d}d}| ¡ r,| ¡ }|dkr| ¡ }n|dkr(| d¡d dkr(d}| ¡ s|dus2J ‚d}d}d}d}d}	d}
d}| ¡ �rÓ| ¡ }|dkr�| d	¡\}}}}t|tƒs]J ‚t|tƒsdJ ‚t|tƒskJ ‚||f}|d
kr}|d@ dkr}d}�nR|d
kr…d}�nJ|dkr�d}�nB|dkr•d}�n:|dkr›d}�n2|dkrÌ| d¡\}}}}|d
krÊ|dv r¶d}�n|dkrÄd}|dkrÂd}�n|dkrÊd}�n|dk�r]|dv �r]|dv�r]| d¡\}}t|tƒséJ ‚t|tƒsðJ ‚d}| d d!|  ¡D ]}t|tƒ�sJ ‚||k�r|}qû|dk�r\|dk�r!|dk�rdnd}nd}t |¡}
t|ƒD ]&}g }| d d!|  ¡D ]}t|tƒ�sCJ ‚| 	|¡ �q9|
 
t|ƒ¡ �q,|dk�rZd"nd#}nr|d$k�rÏ| ¡ }| ¡ �rÏ| ¡ }|d%k�rÊ| d&¡\}}}}}} t|tƒ�s‡J ‚t|tƒ�s�J ‚t|tƒ�s—J ‚t|tƒ�sŸJ ‚t|tƒ�s§J ‚t| tƒ�s¯J ‚t||| ƒ}!t|||ƒ}"|!du�rÉ|"du�rÉ|!|"f}	n| ¡ �sk| ¡ sE|du �sÝ|du �rãd'}#t|#ƒ‚||||	|
fS )(zªParse the JP2 header box to extract size, component count,
    color space information, and optionally DPI information,
    returning a (size, mode, mimetype, dpi) tuple.Ns   jp2hs   ftypz>4sr   s   jpx z	image/jpxs   ihdrz>IIHBr   rE   r5   rF   rG   rC   rH   rI   rJ   rK   rL   s   colrz>BBBI)r   é   Ú1é   ÚCMYKé   s   pclr)rG   rH   )re   rG   z>HBú>ÚBÚPÚPAs   res s   rescz>HHHHBBzMalformed JP2 header)r   r3   r=   r1   r.   Ú
isinstancer   r   ÚrangeÚappendÚgetcolorr9   rb   r   )$r   ÚreaderÚheaderÚmimetyper;   r-   rZ   ÚbpcÚncÚdpiÚpaletteÚcolrÚheightÚwidthÚmethrW   ÚenumcsÚneÚnpcÚmax_bitdepthÚbitdepthÚpalette_modeÚiÚcolorÚvalueÚresÚtresÚvrcnÚvrcdÚhrcnÚhrcdÚvrceÚhrceÚhresÚvresr#   r   r   r   Ú_parse_jp2_header‘   sÄ   ø	
€€€
€


€



òÊFr�   c                      sX   e Zd ZdZdZddd„Zddd„Zed‡ fd
d„ƒZej	ddd„ƒZddd„Z
‡  ZS )ÚJpeg2KImageFileÚJPEG2000zJPEG 2000 (ISO 15444)r   r   c           	      C  s¦  | j d usJ ‚| j  d¡}|dkr"d| _t| j ƒ\| _| _|  ¡  nQ|| j  d¡ }|dkrmd| _t| j ƒ}|\| _| _| _}| _	|d urJ|| j
d< | j  d¡ d	¡rl| j  d
¡}t |¡}| j  |d
 tj¡ |  ¡  nd}t|ƒ‚d| _d| _d}d}z| j  ¡ }t |¡j}W n1 ty»   d}z| j  ¡ }| j  dtj¡ | j  ¡ }| j  |¡ W n ty¸   d}Y nw Y nw t dd| j d| j| j| j||f¡g| _d S )NrK   ó   ÿOÿQÚj2kr5   ó      jP  
‡
Újp2rv   rf   s   jp2cÿOÿQrC   znot a JPEG 2000 filer   r   Újpeg2k©r   r   )r   r    Úcodecr[   Ú_sizeÚ_modeÚ_parse_commentr�   Úcustom_mimetyperw   ÚinfoÚendswithr   rM   r6   r7   r8   r   Ú_reduceÚlayersÚfilenoÚfstatÚst_sizeÚ	Exceptionr   r/   ÚSEEK_ENDr   Ú_Tiler-   Útile)	r   Úsigrr   rv   rO   r   r#   ÚfdÚposr   r   r   Ú_open
  s^   



€


ÿ€ùü
ÿzJpeg2KImageFile._openc                 C  sŽ   | j d usJ ‚	 | j  d¡}|sd S |d }|dv rd S | j  d¡}t |¡}|dkr<| j  |d ¡dd … | jd< d S | j  |d tj¡ q)NTrC   r   )é�   éÙ   éd   Úcomment)r   r    r   rM   r�   r6   r7   r8   )r   ÚmarkerÚtyprO   r   r   r   r   r›   ?  s   
ñzJpeg2KImageFile._parse_commentúVCallable[[int | tuple[int, int], tuple[int, int, int, int] | None], Image.Image] | intc                   s   | j ptƒ jS r)   )rŸ   ÚsuperÚreducer2   ©Ú	__class__r   r   r´   R  s   
zJpeg2KImageFile.reducer„   r   c                 C  s
   || _ d S r)   )rŸ   )r   r„   r   r   r   r´   ^  s   
úImage.core.PixelAccess | Nonec                 C  sÀ   | j rZ| jrZd| j> }|d? }t| jd | | ƒt| jd | | ƒf| _| j d }t|d tƒs4J ‚|d d | j| j|d d |d d f}t 	|d d| j |d |¡g| _ tj 
| ¡S )Nr   r   rI   rK   r—   rC   )r§   rŸ   r   r-   r™   rm   r9   r    r   r¦   Úload)r   ÚpowerÚadjustÚtÚt3r   r   r   r¸   b  s   
þ
*"zJpeg2KImageFile.load)r   r   )r   r²   )r„   r   r   r   )r   r·   )r>   r?   r@   ÚformatÚformat_descriptionr«   r›   Úpropertyr´   Úsetterr¸   Ú__classcell__r   r   rµ   r   r�     s    

5r�   Úprefixr   r   c                 C  s
   |   d¡S )N)r’   r”   )Ú
startswith)rÂ   r   r   r   Ú_acceptt  s   ÿrÄ   ÚimúImage.ImageÚfilenameústr | bytesr   c                 C  s®  | j }t|tƒr| ¡ }| d¡s| dd¡rd}nd}| dd ¡}| dd ¡}| dd ¡}| d	d
¡}| dd ¡}	|	d urTt|	ttfƒrNtdd„ |	D ƒƒsTd}
t	|
ƒ‚| dd¡}| dd ¡}| dd ¡}| dd¡}| dd¡}| dd¡}| dd¡}| dd¡}| d¡}t|tƒr’| ¡ }| dd¡}d}t
|dƒr±z| ¡ }W n ty°   d}Y nw |||||	|||||||||||f| _t | |t dd| j d|¡g¡ d S ) Ns   .j2kÚno_jp2Fr“   r•   ÚoffsetÚtile_offsetÚ	tile_sizeÚquality_modeÚratesÚquality_layersc                 s  s   � | ]
}t |ttfƒV  qd S r)   )rm   r   Úfloat)Ú.0Úquality_layerr   r   r   Ú	<genexpr>�  s   € 
ÿz_save.<locals>.<genexpr>z,quality_layers must be a sequence of numbersÚnum_resolutionsr   Úcodeblock_sizeÚprecinct_sizeÚirreversibleÚprogressionÚLRCPÚcinema_modeÚnoÚmctÚsignedr¯   Úpltr   r¡   r–   r—   )Úencoderinform   r'   Úencoderž   ÚgetÚlistr9   ÚallÚ
ValueErrorÚhasattrr¡   r¤   Úencoderconfigr   Ú_saver¦   r-   )rÅ   r   rÇ   r�   ÚkindrÊ   rË   rÌ   rÍ   rÏ   r#   rÔ   Ú	cblk_sizerÖ   r×   rØ   rÚ   rÜ   rÝ   r¯   rÞ   r©   r   r   r   rç   ~  sr   
ÿÿþ


ÿð&rç   )z.jp2z.j2kz.jpcz.jpfz.jpxz.j2cz	image/jp2)r   r   r   rB   )r\   r   r]   r   r^   r   r   r_   )r   r   r   rc   )rÂ   r   r   r   )rÅ   rÆ   r   r   rÇ   rÈ   r   r   )Ú
__future__r   r/   r7   r*   Útypingr   Ú r   r   r   r   ÚTYPE_CHECKINGÚcollections.abcr	   r
   r   r[   rb   r�   r�   rÄ   rç   Úregister_openr½   Úregister_saveÚregister_extensionsÚregister_mimer   r   r   r   Ú<module>   s.   
J

	u
n

G
ÿ