
    zvg=6                    |   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	 ddl
mZmZmZmZ  G d d          Zd$dZd%dZd&dZ G 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        g d"            ej        ej        d#           dS ))    )annotationsN)Callable)IOcast   )Image	ImageFileImagePalette_binaryc                  L    e Zd ZdZddd	ZddZddZddZddZddZ	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                F    || _         |dk    | _        || _        d| _        d S )Nr   r   )r   
has_lengthr   remaining_in_box)selfr   r   s      R/var/www/pixelcanvas.ch/venv/lib/python3.11/site-packages/PIL/Jpeg2KImagePlugin.py__init__zBoxReader.__init__!   s)     A+ "    	num_bytesboolc                    | j         r'| j                                        |z   | j        k    rdS | j        dk    r|| j        k    S dS )NFr   T)r   r   tellr   r   )r   r   s     r   	_can_readzBoxReader._can_read'   sM    ? 	tw||~~	9DKGG5 A%% 5554r   bytesc                ,   |                      |          sd}t          |          | j                            |          }t	          |          |k     r%d| dt	          |           d}t          |          | j        dk    r| xj        |z  c_        |S )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_byteszBoxReader._read_bytes1   s    ~~i(( 	#-Cc"""w||I&&t99y  QiQQSYYQQQC#,, 1$$!!Y.!!r   field_formatstrtuple[int | bytes, ...]c                ~    t          j        |          }|                     |          }t          j        ||          S N)structcalcsizer*   unpack)r   r+   sizer)   s       r   read_fieldszBoxReader.read_fields?   s6    |,,%%}\4000r   c                ~    | j         }|                     |          }t          t          j        |          |          S r/   )r   r*   r   ioBytesIO)r   r3   r)   s      r   
read_boxeszBoxReader.read_boxesD   s7    $%%D))4000r   c                h    | j         r*| j                                        | j        z   | j        k     S dS )NT)r   r   r   r   r   )r   s    r   has_next_boxzBoxReader.has_next_boxI   s0    ? 	7<<>>D$99DKGG4r   c                   | j         dk    r*| j                            | j         t          j                   d| _         t          t          t          t          f         | 	                    d                    \  }}|dk    r1t          t          | 	                    d          d                   }d}nd}||k     s| 
                    ||z
            sd}t          |          ||z
  | _         |S )	Nr   r   z>I4sr   z>Q      zInvalid header length)r   r   seekosSEEK_CURr   tupler   r!   r4   r    r$   )r   lboxtboxhlenr(   s        r   next_box_typezBoxReader.next_box_typeO   s     1$$GLL.<<< " %U
+T-=-=f-E-EFF
d199T--d33A677DDDD$;;dnnTD[99;)Cc""" $tr   N)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*   r4   r8   r:   rE    r   r   r   r      s         
# # # # #      1 1 1 1
1 1 1 1
        r   r   r   r   r   tuple[tuple[int, int], str]c                   |                      d          }t          j        |          }||                      |dz
            z   }t          j        d|          \  }}}}}}}	}	}	}	}
||z
  ||z
  f}|
dk    r.t          j        d|d          }|d         dz  dz   dk    rd	}n/d
}n,|
dk    rd}n#|
dk    rd}n|
dk    rd}nd}t          |          ||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>HHIIIIIIIIHr   z>B&   r      r=   I;16LLA   RGB   RGBAz"unable to determine J2K image mode)r%   r   i16ber0   unpack_fromr$   )r   hdrlsizsizrsizxsizysizxosizyosiz_csizr3   ssizmoder(   s                  r   _parse_codestreamre   e   s    ''!**C=D
q!!
!C=C=O> >:D$dE5!Q1d 5L$,'Dqyy!$R00GdNa!##DDDD			2#:r   numr   denomexpfloat | Nonec                4    |dk    rdS d| z  d|z  z  d|z  z  S )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'  rJ   )rf   rg   rh   s      r   _res_to_dpirm      s.     zzt#IS!eem44r   etuple[tuple[int, int], str, str | None, tuple[float, float] | None, ImagePalette.ImagePalette | None]c                   t          |           }d}d}|                                rj|                                }|dk    r|                                }n;|dk    r!|                    d          d         dk    rd}|                                j|J d}d}d}d}d}	d}
|                                rp|                                }|dk    r|                    d	          \  }}}}t          |t                    sJ t          |t                    sJ t          |t                    sJ ||f}|d
k    r|dz  dk    rd}n|d
k    rd}n|dk    rd}n|dk    rd}n|dk    rd}n|dk    r0|dk    r*|                    d          \  }}}}|d
k    r|dk    rd}nm|dk    r8|dv r3|                    d          \  }}t          |t                    sJ t          |t                    sJ d}|                    dd|z  z             D ]!}t          |t                    sJ ||k    r|}"|dk    rt          j        |dk    rdnd          }
t          |          D ]p}g }|                    dd|z  z             D ].}t          |t                    sJ |	                    |           /|

                    t          |                     q|dk    rdnd}n.|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          |||          } || || f}	n|                                |                                p||d#}!t          |!          ||||	|
fS )$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   rO   r=   rP   rQ   rM   rR   rS   rT   rU   rV   s   colrz>BBBI   CMYKs   pclr)rQ   rR   z>HB>BPPAs   res s   rescz>HHHHBBzMalformed JP2 header)r   r:   rE   r8   r4   
isinstancer   r
   rangeappendgetcolorrA   rm   r$   )"r   readerheadermimetyperC   r3   rd   bpcncdpipaletteheightwidthmethra   enumcsnenpcmax_bitdepthbitdepthicolorvalue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6& 



 ' DD
C	B
CG




 9##%%7??%+%7%7%@%@"FE2sfc*****eS)))))c3'''''6?DQwwC$J!++qqqqW__q!'!3!3G!<!<D!QqyyVr\\W__!4!4((//GBb#&&&&&c3'''''L"..scCi/@AA , ,!(C00000l**#+Lq  &3cQhhFFERRr 3 3A')E!'!3!3C394E!F!F , ,)%55555U++++$$U5\\2222"ckksstW__##%%C""$$ ((**7??9<9S9S6D$dD$%dC00000%dC00000%dC00000%dC00000%dC00000%dC00000&tT488D&tT488D'D,<#Tl ""$$ W 



 9v |t|$#xg--r   c                  r     e Zd ZdZdZddZddZed fd            Zej	        dd            ZddZ
 xZS )Jpeg2KImageFileJPEG2000zJPEG 2000 (ISO 15444)r   r   c           
        | j                             d          }|dk    r>d| _        t          | j                   \  | _        | _        |                                  n|| j                             d          z   }|dk    rd| _        t          | j                   }|\  | _        | _        | _        }| _	        |
|| j
        d<   | j                             d                              d	          rj| j                             d
          }t          j        |          }| j                             |d
z
  t          j                   |                                  nd}t#          |          d| _        d| _        d}d}	 | j                                         }t          j        |          j        }n# t.          $ r d}	 | j                                         }| j                             dt2          j                   | j                                         }| j                             |           n# t.          $ r d}Y nw xY wY nw xY wt7          j        dd| j        z   d| j        | j        | j        ||f          g| _        d S )NrU      OQj2kr=         jP  

jp2r   rp   s   jp2cOQrM   znot a JPEG 2000 filer   r   jpeg2kr   r   )r   r%   codecre   _size_mode_parse_commentr   custom_mimetyper   infoendswithr   rW   r>   r?   r@   r$   _reducelayersfilenofstatst_size	Exceptionr   r6   SEEK_ENDr	   _Tiler3   tile)	r   sigr{   r   rY   r   r(   fdposs	            r   _openzJpeg2KImageFile._open   sV   gll1oo%%%DJ%6tw%?%?"DJ
!!!!Q'C==="
*4733RXO
DJ(<c4<?'*DIe$7<<##,,-DEE *',,q//C$]3//FGLL!R[999''))),!#&&&	!!BXb\\)FF 	 	 	BgllnnQ,,,S!!!!   	 O"T\4;FC	 
			s7   2F4 4IA1H32I3I?IIIIc                t   	 | j                             d          }|sd S |d         }|dv rd S | j                             d          }t          j        |          }|dk    r/| j                             |dz
            dd          | j        d<   d S | j                             |dz
  t          j                   )NTrM   r   )      d   comment)r   r%   r   rW   r   r>   r?   r@   )r   markertyprY   r   s        r   r   zJpeg2KImageFile._parse_comment.  s    	6W\\!__F )Cl""',,q//C]3''Fd{{'+w||FQJ'?'?'C	)$VaZ555	6r   VCallable[[int | tuple[int, int], tuple[int, int, int, int] | None], Image.Image] | intc                8    | j         pt                      j        S r/   )r   superreduce)r   	__class__s    r   r   zJpeg2KImageFile.reduce@  s     |-uww~-r   r   r   c                    || _         d S r/   )r   )r   r   s     r   r   zJpeg2KImageFile.reduceL  s    r   Image.core.PixelAccess | Nonec                $   | j         r| j        rd| j        z  }|dz	  }t          | j        d         |z   |z            t          | j        d         |z   |z            f| _        | j         d         }t          |d         t                    sJ |d         d         | j        | j        |d         d         |d         d         f}t          j	        |d         d| j        z   |d         |          g| _         t          j        
                    |           S )Nr   r   rS   rU   r   rM   )r   r   r   r3   r   rv   rA   r   r	   r   load)r   poweradjusttt3s        r   r   zJpeg2KImageFile.loadP  s    9 	N 	N%EaZFTYq\F*e344TYq\F*e344DJ 	!AadE*****A$q'4<ad1gqtAwGB"1v	/A1Q4LLMDI"''---r   )r   r   )r   r   )r   r   r   r   )r   r   )rF   rG   rH   formatformat_descriptionr   r   propertyr   setterr   __classcell__)r   s   @r   r   r      s        F02
 2
 2
 2
h6 6 6 6$ 	. 	. 	. 	. 	. X	. ]   ]. . . . . . . .r   r   prefixr!   r   c                :    | d d         dk    p| d d         dk    S )NrU   r   rp   r   rJ   )r   s    r   _acceptr   b  s/    rr
)) 	B#2#;AAr   imImage.Imagefilenamestr | bytesr   c                D   | j         }t          |t                    r|                                }|                    d          s|                    dd          rd}nd}|                    dd           }|                    dd           }|                    dd           }|                    d	d
          }|                    dd           }	|	Ft          |	t          t          f          rt          d |	D                       sd}
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(	 |                                }n# t          $ r d}Y nw xY w|||||	|||||||||||f| _        t          j        | |t          j        dd| j        z   d|          g           d S )Ns   .j2kno_jp2Fr   r   offsettile_offset	tile_sizequality_moderatesquality_layersc              3  N   K   | ] }t          |t          t          f          V  !d S r/   )rv   r   float).0quality_layers     r   	<genexpr>z_save.<locals>.<genexpr>  sA       
 
8EJ}sEl33
 
 
 
 
 
r   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   )encoderinforv   r,   encoder   getlistrA   all
ValueErrorhasattrr   r   encoderconfigr	   _saver   r3   )r   r   r   r   kindr   r   r   r   r   r(   r   	cblk_sizer   r   r   r   r   r   r   r   r   s                         r   r   r   m  s   >D(C   %??$$!! TXXh%>%> XXh%%F((=$//Kd++I88NG44LXX.55N!>D%=11 " 
 
IW
 
 
 
 
 " =oohh0!44O)400IHH_d33M88NE22L((=&11K((=$//K
((5!

CXXh&&Fhhy!!G'3 #..""
((5%
 
 C	Br8 	BB 	 	 	BBB	 	
!B& OBY_Xv7GDQQRSSSSSs   .I II)z.jp2z.j2kz.jpcz.jpfz.jpxz.j2cz	image/jp2)r   r   r   rK   )rf   r   rg   r   rh   r   r   ri   )r   r   r   rn   )r   r!   r   r   )r   r   r   r   r   r   r   r   )
__future__r   r6   r?   r0   collections.abcr   typingr   r    r   r	   r
   r   r   re   rm   r   r   r   r   register_openr   register_saveregister_extensionsregister_mimerJ   r   r   <module>r      s    # " " " " " 				 				  $ $ $ $ $ $         5 5 5 5 5 5 5 5 5 5 5 5G G G G G G G GT   >5 5 5 5b. b. b. b.Ri. i. i. i. i.i) i. i. i.X   @T @T @T @TN  O*OW E E E  O*E 2 2 2  LLL    O*K 8 8 8 8 8r   