
    (phq0                       S SK Jr  S SKrS SKrS SKrS SKJrJrJr  SSK	J
r
JrJrJr   " S S5      rSS jrSS	 jrS
 r " S S\R                  5      rSS jrSS jr\
R*                  " \R,                  \\5        \
R.                  " \R,                  \5        \
R0                  " \R,                  / SQ5        \
R2                  " \R,                  S5        g)    )annotationsN)IOTuplecast   )Image	ImageFileImagePalette_binaryc                  ^    \ rS rSrSrSS jrSS jrSS jrSS jrSS jr	SS jr
SS	 jrS
rg)	BoxReader   zq
A small helper class to read fields stored in JPEG2000 header boxes
and to easily step into and read sub-boxes.
c                >    Xl         US:  U l        X l        SU l        g )Nr   fp
has_lengthlengthremaining_in_box)selfr   r   s      H/var/www/html/venv/lib/python3.13/site-packages/PIL/Jpeg2KImagePlugin.py__init__BoxReader.__init__    s     A+ "    c                    U R                   (       a,  U R                  R                  5       U-   U R                  :  a  gU R                  S:  a  XR                  :*  $ g)NFr   T)r   r   tellr   r   )r   	num_bytess     r   	_can_readBoxReader._can_read&   sF    ??tww||~	9DKKG  A% 5 555r   c                $   U R                  U5      (       d  Sn[        U5      eU R                  R                  U5      n[	        U5      U:  a  SU S[	        U5       S3n[        U5      eU R                  S:  a  U =R                  U-  sl        U$ )NzNot enough data in headerzExpected to read z bytes but only got .r   )r   SyntaxErrorr   readlenOSErrorr   )r   r   msgdatas       r   _read_bytesBoxReader._read_bytes0   s    ~~i((-Cc""ww||I&t9y %i[0DSYKqQC#,  1$!!Y.!r   c                |    [         R                  " U5      nU R                  U5      n[         R                  " X5      $ N)structcalcsizer(   unpack)r   field_formatsizer'   s       r   read_fieldsBoxReader.read_fields>   s/    |,%}}\00r   c                |    U R                   nU R                  U5      n[        [        R                  " U5      U5      $ r+   )r   r(   r   ioBytesIO)r   r0   r'   s      r   
read_boxesBoxReader.read_boxesC   s3    $$%D)400r   c                    U R                   (       a4  U R                  R                  5       U R                  -   U R                  :  $ g)NT)r   r   r   r   r   )r   s    r   has_next_boxBoxReader.has_next_boxH   s0    ??77<<>D$9$99DKKGGr   c                   U R                   S:  a4  U R                  R                  U R                   [        R                  5        SU l         [        [        [        [        4   U R                  S5      5      u  pUS:X  a%  [        [        U R                  S5      S   5      nSnOSnX:  d  U R                  X-
  5      (       d  Sn[        U5      eX-
  U l         U$ )	Nr   r   z>I4sr   z>Q      zInvalid header length)r   r   seekosSEEK_CURr   r   intbytesr1   r   r"   )r   lboxtboxhlenr&   s        r   next_box_typeBoxReader.next_box_typeN   s      1$GGLL..< " %U
+T-=-=f-EF
19T--d3A67DDD;dnnT[99)Cc"" $r   r   N)r   )r   rA   returnbool)r   rA   rH   rB   )r/   strrH   ztuple[int | bytes, ...])rH   r   )rH   rI   )rH   rB   )__name__
__module____qualname____firstlineno____doc__r   r   r(   r1   r6   r9   rF   __static_attributes__ r   r   r   r      s*    
#1
1
r   r   c                   U R                  S5      n[        R                  " U5      nXR                  US-
  5      -   n[        R                  " SU5      u  p$pVpx      pXW-
  Xh-
  4nU
S:X  a2  [        R                  " SUS5      nUS   S-  S-   S:  a  S	nX4$ S
n X4$ U
S:X  a  SnX4$ U
S:X  a  SnX4$ U
S:X  a  SnX4$ Sn[        U5      e)zParse 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      r=   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_csizr0   ssizmoder&   s                  r   _parse_codestreamrk   d   s    ''!*C==D
q!
!C=C=O=O>:DE!Q1 L$,'Dqy!!$R0GdNa!#D : D : 
 : 
 : 

 : 3#r   c                2    US:X  a  gSU -  SU-  -  SU-  -  $ )zConvert 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'  rQ   )numdenomexps      r   _res_to_dpirr      s*     z#IS!eem44r   c                B   [        U 5      nSnSnUR                  5       (       a^  UR                  5       nUS:X  a  UR                  5       nO7US:X  a  UR	                  S5      S   S:X  a  SnUR                  5       (       a  M^  SnSnSnSnSn	Sn
UR                  5       (       Ga  UR                  5       nUS:X  aR  UR	                  S	5      u  ppX4nUS
:X  a  US-  S:  a  SnGOUS
:X  a  SnGOUS:X  a  SnGOxUS:X  a  SnGOnUS:X  a  SnGOdUS:X  a+  US:X  a%  UR	                  S5      u  n  pUS
:X  a  US:X  a  SnGO3US:X  a  US;   a  UR	                  S5      u  nnUR	                  SSU-  -   5      n[        U5      S::  aW  [        R                  " 5       n
[        U5       H)  nU
R                  UR	                  SSU-  -   5      5        M+     US:X  a  SOSnOUS :X  a  UR                  5       nUR                  5       (       aj  UR                  5       nUS!:X  a=  UR	                  S"5      u  nnnnnn[        UUU5      n[        UUU5      nUb  Ub  UU4n	OUR                  5       (       a  Mj  UR                  5       (       a  GM  Ub  Uc  S#n[        U5      eXVX9U
4$ )$zParse 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   rU   r=   rV   rW   rS   rX   rY   rZ   r[   r\   s   colrz>BBBI   CMYKs   pclr)rW   rX   z>HB>BPPAs   res s   rescz>HHHHBBzMalformed JP2 header)r   r9   rF   r6   r1   maxr
   rangegetcolorrr   r"   )r   readerheadermimetyperD   r0   rj   bpcncdpipaletteheightwidthmethrg   enumcsnenpc	bitdepthsirestresvrcnvrcdhrcnhrcdvrcehrcehresvresr&   s                                  r   _parse_jp2_headerr      s    r]FFH




##%7?&&(FW_!!%(+w6& 



 DD
C	B
CG




##%7?%+%7%7%@"F2?DQwC$J!+qqqqW_q!'!3!3G!<D!QqyVr\W_!4((/GB**3#)+<=I9~"&335rA$$V%7%7sSy8I%JK #"ckstW_##%C""$$((*7?9<9S6D$dD$&tT48D&tT48D'D,<#Tl ""$$= 



P |t|$#xg--r   c                  x   ^  \ rS rSrSrSrS
S jrS
S jr\U 4S j5       r	\	R                  S 5       r	S rS	rU =r$ )Jpeg2KImageFile   JPEG2000zJPEG 2000 (ISO 15444)c                X   U R                   R                  S5      nUS:X  a*  SU l        [        U R                   5      u  U l        U l        OXR                   R                  S5      -   nUS:X  a  SU l        [        U R                   5      nUu  U l        U l        U l        o0l        Ub  X0R                  S'   U R                   R                  S5      R                  S	5      (       a  U R                  5         OS
n[        U5      eSU l        SU l        SnSn U R                   R                  5       n[         R"                  " U5      R$                  nSSU R0                  -   SU R                  U R                  U R                  XV44/U l        g ! [&         a    Sn U R                   R)                  5       nU R                   R+                  S[,        R.                  5        U R                   R)                  5       nU R                   R+                  U5         N! [&         a    Sn  Nf = ff = f)Nr[      OQj2kr=         jP  

jp2r   rt   s   jp2cOQznot a JPEG 2000 filer   r   jpeg2kr   r   )r   r#   codecrk   _size_moder   custom_mimetyper   infoendswith_parse_commentr"   _reducelayersfilenor?   fstatst_size	Exceptionr   r>   r4   SEEK_ENDr0   tile)r   sigr~   r   r&   fdr   poss           r   _openJpeg2KImageFile._open   s   ggll1o%%DJ%6tww%?"DJ
Q'C=="
*4773RXO
DJ(<c<?'*IIe$77<<#,,-DEE''),!#&&	!BXXb\))F "T\\4;;C	
	  	BggllnQ,S! 	s+   :F H)A9HH%!H)$H%%H)c                H   U R                   R                  S5      n[        R                  " U5      nU R                   R	                  US-
  [
        R                  5         U R                   R                  S5      nU(       d  g US   nUS;   a  g U R                   R                  S5      n[        R                  " U5      nUS:X  a/  U R                   R                  US-
  5      SS  U R                  S'   g U R                   R	                  US-
  [
        R                  5        M  )NrS   r   )   r   d   comment)r   r#   r   r]   r>   r?   r@   r   )r   r_   r   markertyps        r   r   Jpeg2KImageFile._parse_comment  s    ggll1os#VaZ-WW\\!_F)Cl"'',,q/C]]3'Fd{'+ww||FQJ'?'C		)$VaZ5 r   c                >   > U R                   =(       d
    [        TU ]  $ r+   )r   superreduce)r   	__class__s    r   r   Jpeg2KImageFile.reduce#  s    
 ||-uw~-r   c                    Xl         g r+   )r   )r   values     r   r   r   *  s    r   c                   U R                   (       a  U R                  (       a  SU R                  -  nUS-	  n[        U R                  S   U-   U-  5      [        U R                  S   U-   U-  5      4U l        U R                   S   nUS   S   U R                  U R
                  US   S   US   S   4nUS   SU R                  -   US   U4/U l         [        R                  R                  U 5      $ )Nr   r   rY   r[   r   rS   )r   r   rA   r0   r   r   r	   load)r   poweradjusttt3s        r   r   Jpeg2KImageFile.load.  s    99%EaZFTYYq\F*e34TYYq\F*e34DJ 		!AA$q'4<<ad1gqtAwGBA$ 2AaD"=>DI""''--r   )r   r   r   r   r   r   r   r   )rH   None)rK   rL   rM   rN   formatformat_descriptionr   r   propertyr   setterr   rP   __classcell__)r   s   @r   r   r      sO    F0.
`6, . . ]] . .r   r   c                0    U S S S:H  =(       d    U S S S:H  $ )Nr[   r   rt   r   rQ   )prefixs    r   _acceptr   ?  s+    r
)) 	B#2;AAr   c                   U R                   n[        U[        5      (       a  UR                  5       nUR	                  S5      (       d  UR                  SS5      (       a  SnOSnUR                  SS 5      nUR                  SS 5      nUR                  SS 5      nUR                  S	S
5      nUR                  SS 5      n	U	b?  [        U	[        [        45      (       a  [        S U	 5       5      (       d  Sn
[        U
5      eUR                  SS5      nUR                  SS 5      nUR                  SS 5      nUR                  SS5      nUR                  SS5      nUR                  SS5      nUR                  SS5      nUR                  SS5      nUR                  S5      n[        U[        5      (       a  UR                  5       nUR                  SS5      nSn[        US5      (       a   UR                  5       nUUUUU	UUUUUUUUUUU4U l        [        R                  " XSSU R                   -   SU4/5        g ! [         a    Sn NOf = f)Ns   .j2kno_jp2Fr   r   offsettile_offset	tile_sizequality_moderatesquality_layersc              3  N   #    U  H  n[        U[        [        45      v   M     g 7fr+   )
isinstancerA   float).0quality_layers     r   	<genexpr>_save.<locals>.<genexpr>\  s!      
IWJ}sEl33s   #%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   )encoderinfor   rJ   encoder   getlisttupleall
ValueErrorhasattrr   r   encoderconfigr	   _saver0   )imr   filenamer   kindr   r   r   r   r   r&   r   	cblk_sizer   r   r   r   r   r   r   r   r   s                         r   r   r   J  s4   >>D(C  ??$!!TXXh%>%>XXh%F((=$/Kd+I88NG4LXX.5N!>D%=11 
IW
 
 
 =ohh0!4O)40IHH_d3M88NE2L((=&1K((=$/K
((5!
CXXh&Fhhy!G'3.."
((5%
 C	Br8	B
 	
!B& OOBh(8!TBCD-  	B	s   ,H= =II)z.jp2z.j2kz.jpcz.jpfz.jpxz.j2cz	image/jp2)rH   ztuple[tuple[int, int], str])ro   rA   rp   rA   rq   rA   rH   zfloat | None)r   rB   rH   rI   )r   zImage.Imager   z	IO[bytes]r   zstr | bytesrH   r   )
__future__r   r4   r?   r,   typingr   r   r    r   r	   r
   r   r   rk   rr   r   r   r   r   register_openr   register_saveregister_extensionsregister_mimerQ   r   r   <module>r     s     # 	 	  " " 5 5G GT>5F.Zc.i)) c.L@EN   O**OW E   O**E 2   L   O**K 8r   