Ë
    D·jq0  ã                  ó¦  — d dl mZ d dlZd dlZd dlZd dlmZ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
„ 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
j0                  ej,                  g d¢«        e
j2                  ej,                  d«       y)é    )ÚannotationsN)ÚIOÚTupleÚcasté   )ÚImageÚ	ImageFileÚImagePaletteÚ_binaryc                  óH   — e Zd ZdZd
d„Zdd„Zdd„Zdd„Zdd„Zdd„Z	dd„Z
y	)Ú	BoxReaderz}
    A small helper class to read fields stored in JPEG2000 header boxes
    and to easily step into and read sub-boxes.
    c                óB   — || _         |dk\  | _        || _        d| _        y )Nr   éÿÿÿÿ)ÚfpÚ
has_lengthÚlengthÚremaining_in_box)Úselfr   r   s      úc/var/www/html/ai-video-generator/backend/venv/lib/python3.12/site-packages/PIL/Jpeg2KImagePlugin.pyÚ__init__zBoxReader.__init__    s#   € ØˆŒØ  A™+ˆŒØˆŒØ "ˆÕó    c                ó®   — | j                   r+| j                  j                  «       |z   | j                  kD  ry| j                  dk\  r|| j                  k  S y)NFr   T)r   r   Útellr   r   )r   Ú	num_bytess     r   Ú	_can_readzBoxReader._can_read&   sH   € Ø�?Š?˜tŸw™wŸ|™|›~°	Ñ9¸D¿K¹KÒGàØ× Ñ  AÒ%à × 5Ñ 5Ñ5Ð5àr   c                ó  — | j                  |«      sd}t        |«      ‚| j                  j                  |«      }t	        |«      |k  rd|› dt	        |«      › d�}t        |«      ‚| j                  dkD  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_bytes0   sƒ   € Ø�~‰~˜iÔ(Ø-ˆCÜ˜cÓ"Ð"à�w‰w�|‰|˜IÓ&ˆÜˆt‹9�yÒ Ø% i [Ð0DÄSÈÃYÀKÈqÐQˆCÜ˜#“,Ðà× Ñ  1Ò$Ø×!Ò! YÑ.Õ!Øˆr   c                óz   — t        j                  |«      }| j                  |«      }t        j                  ||«      S ©N)ÚstructÚcalcsizer$   Úunpack)r   Úfield_formatÚsizer#   s       r   Úread_fieldszBoxReader.read_fields>   s1   € Ü�‰˜|Ó,ˆØ×Ñ Ó%ˆÜ�}‰}˜\¨4Ó0Ð0r   c                óz   — | j                   }| j                  |«      }t        t        j                  |«      |«      S r&   )r   r$   r   ÚioÚBytesIO)r   r+   r#   s      r   Ú
read_boxeszBoxReader.read_boxesC   s3   € Ø×$Ñ$ˆØ×Ñ Ó%ˆÜœŸ™ DÓ)¨4Ó0Ð0r   c                ó„   — | j                   r4| j                  j                  «       | j                  z   | j                  k  S y)NT)r   r   r   r   r   )r   s    r   Úhas_next_boxzBoxReader.has_next_boxH   s0   € Ø�?Š?Ø—7‘7—<‘<“> D×$9Ñ$9Ñ9¸D¿K¹KÑGÐGàr   c                ó°  — | j                   dkD  r4| j                  j                  | j                   t        j                  «       d| _         t        t        t        t        f   | j                  d«      «      \  }}|dk(  r%t        t        | j                  d«      d   «      }d}nd}||k  s| j                  ||z
  «      sd}t        |«      ‚||z
  | _         |S )	Nr   r   z>I4sr   z>Qé   é   zInvalid header length)r   r   ÚseekÚosÚSEEK_CURr   r   ÚintÚbytesr,   r   r   )r   ÚlboxÚtboxÚhlenr"   s        r   Únext_box_typezBoxReader.next_box_typeN   s¾   € à× Ñ  1Ò$Ø�G‰G�L‰L˜×.Ñ.´·±Ô<Ø "ˆÔô œ%¤¤U 
Ñ+¨T×-=Ñ-=¸fÓ-EÓF‰
ˆˆdØ�1Š9Üœ˜T×-Ñ-¨dÓ3°AÑ6Ó7ˆDØ‰DàˆDà�$Š;˜dŸn™n¨T°D©[Ô9Ø)ˆCÜ˜cÓ"Ð"à $ t¡ˆÔØˆr   N)r   )r   r9   ÚreturnÚbool)r   r9   r?   r:   )r*   Ústrr?   ztuple[int | bytes, ...])r?   r   )r?   r@   )r?   r:   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r$   r,   r0   r2   r>   © r   r   r   r      s*   „ ñó
#óóó1ó
1ó
ôr   r   c                óœ  — | j                  d«      }t        j                  |«      }|| j                  |dz
  «      z   }t        j                  d|«      \  }}}}}}}	}	}	}	}
||z
  ||z
  f}|
dk(  r1t        j                  d|d«      }|d   dz  dz   dkD  rd	}||fS d
}||fS |
dk(  rd}||fS |
dk(  rd}||fS |
dk(  rd}||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"   s                  r   Ú_parse_codestreamr`   d   s*  € ð �'‰'�!‹*€CÜ�=‰=˜Ó€DØ
�—‘˜˜q™Ó!Ñ
!€CÜ=C×=OÑ=OØ˜ó>Ñ:€Dˆ$��d˜E 5¨!¨Q°°1°dð �5‰L˜$ ™,Ð'€DØˆq‚yÜ×!Ñ! $¨¨RÓ0ˆØ�‰G�d‰N˜aÑ !Ò#ØˆDð �ˆ:Ðð ˆDð �ˆ:Ðð 
�ŠØˆð �ˆ:Ðð 
�ŠØˆð �ˆ:Ðð 
�ŠØˆð
 �ˆ:Ðð 3ˆÜ˜#ÓÐr   c                ó0   — |dk(  ryd| z  d|z  z  d|z  z  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'  rF   )ÚnumÚdenomÚexps      r   Ú_res_to_dpirg   ƒ   s*   € ð �‚zØØ�#‰I˜˜S™Ñ! e¨e¡mÑ4Ð4r   c                óÚ  — t        | «      }d}d}|j                  «       rU|j                  «       }|dk(  r|j                  «       }n/|dk(  r|j	                  d«      d   dk(  rd}|j                  «       rŒUd}d}d}d}d}	d}
|j                  «       �rÃ|j                  «       }|dk(  rP|j	                  d	«      \  }}}}||f}|d
k(  r|dz  dkD  rd}�nq|d
k(  rd}�nh|dk(  rd}�n_|dk(  rd}�nV|dk(  �rPd}�nL|dk(  r+|dk(  r&|j	                  d«      \  }}}}|d
k(  �r&|dk(  �r d}�n|dk(  r‘|dv r�|j	                  d«      \  }}|j	                  dd|z  z   «      }t        |«      dk  rÚt        j                  «       }
t        |«      D ](  }|
j                  |j	                  dd|z  z   «      «       Œ* |dk(  rdnd}n†|d k(  r�|j                  «       }|j                  «       ra|j                  «       }|d!k(  r;|j	                  d"«      \  }}}}}}t        |||«      }t        |||«      }|�|�||f}	n|j                  «       rŒa|j                  «       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   rJ   r5   rK   rL   rH   rM   rN   rO   rP   rQ   s   colrz>BBBIé   ÚCMYKs   pclr)rL   rM   z>HBú>ÚBÚPÚPAs   res s   rescz>HHHHBBzMalformed JP2 header)r   r2   r>   r0   r,   Úmaxr
   ÚrangeÚgetcolorrg   r   )r   ÚreaderÚheaderÚmimetyper<   r+   r_   ÚbpcÚncÚdpiÚpaletteÚheightÚwidthÚmethr\   Ú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¸Ó%@Ñ"ˆF�E˜2˜sØ˜6�?ˆDØ�QŠw˜C $™J¨!Ò+Ø’Ø�q’Ø’Ø�q’Ø’Ø�q’Ø’Ø�q“Ø’Ø�WŠ_  q¢Ø!'×!3Ñ!3°GÓ!<ÑˆD�!�Q˜Ø�q‹y˜V r›\Ø’Ø�WŠ_ ¨Ñ!4Ø×(Ñ(¨Ó/‰GˆB�Ø×*Ñ*¨3°#¸±)Ñ+<Ó=ˆIÜ�9‹~ Ò"Ü&×3Ñ3Ó5�Ü˜r›ò L�AØ×$Ñ$ V×%7Ñ%7¸¸sÀS¹yÑ8IÓ%JÕKðLà" cšk‘s¨t‘Ø�WŠ_Ø×#Ñ#Ó%ˆCØ×"Ñ"Ô$Ø×(Ñ(Ó*�Ø˜7’?Ø9<¿¹ÈÓ9SÑ6�D˜$  d¨D°$Ü& t¨T°4Ó8�DÜ& t¨T°4Ó8�DØÐ'¨DÐ,<Ø# T˜l˜Øð ×"Ñ"Õ$ð= ×
Ñ
Ö
ðP €|�t�|Ø$ˆÜ˜#ÓÐà��x  gÐ-Ð-r   c                  ój   ‡ — e Zd ZdZdZdd„Zdd„Zeˆ fd„«       Zej                  d„ «       Zd„ Z
ˆ xZS )	ÚJpeg2KImageFileÚJPEG2000zJPEG 2000 (ISO 15444)c                óJ  — | j                   j                  d«      }|dk(  r*d| _        t        | j                   «      \  | _        | _        n´|| j                   j                  d«      z   }|dk(  r„d| _        t        | j                   «      }|\  | _        | _        | _        }| _        |�|| j                  d<   | j                   j                  d«      j                  d	«      r| j                  «        nd
}t        |«      ‚d| _        d| _        d}d}	 | j                   j                  «       }t!        j"                  |«      j$                  }dd| j0                  z   d| j                  | j                  | j                  ||ffg| _        y # t&        $ r‘ d}	 | j                   j)                  «       }| j                   j+                  dt,        j.                  «       | j                   j)                  «       }| j                   j+                  |«       n# t&        $ r d}Y nw xY wY ŒÖw xY w)NrP   ó   ÿOÿQÚj2kr5   ó      jP  
‡
Újp2rw   ri   s   jp2cÿOÿQznot a JPEG 2000 filer   r   Újpeg2k©r   r   )r   r   Úcodecr`   Ú_sizeÚ_moder‹   Úcustom_mimetyperx   ÚinfoÚendswithÚ_parse_commentr   Ú_reduceÚlayersÚfilenor7   ÚfstatÚst_sizeÚ	Exceptionr   r6   r.   ÚSEEK_ENDr+   Útile)r   Úsigrs   rw   r"   Úfdr   Úposs           r   Ú_openzJpeg2KImageFile._openÝ   sÁ  € Ø�g‰g�l‰l˜1‹oˆØÐ%Ò%ØˆDŒJÜ%6°t·w±wÓ%?Ñ"ˆDŒJ˜�
à˜Ÿ™Ÿ™ Q›Ñ'ˆCàÐ=Ò=Ø"�”
Ü*¨4¯7©7Ó3�ØRXÑO�”
˜DœJ¨Ô(<¸cÀ4Ä<Ø�?Ø'*�D—I‘I˜eÑ$Ø—7‘7—<‘< Ó#×,Ñ,Ð-DÔEØ×'Ñ'Õ)à,�Ü! #Ó&Ð&àˆŒØˆŒàˆØˆð	Ø—‘—‘Ó!ˆBÜ—X‘X˜b“\×)Ñ)ˆFð Ø˜Ÿ™Ñ"ØØ—‘˜TŸ\™\¨4¯;©;¸¸FÐCð	ð
ˆ�	øô ò 	ØˆBðØ—g‘g—l‘l“n�Ø—‘—‘˜Q¤§¡Ô,ØŸ™Ÿ™›�Ø—‘—‘˜SÕ!øÜò Ø’ðüð	ús7   Ä9F ÆH"ÆA9HÈH"ÈHÈH"ÈHÈH"È!H"c                ó2  — | j                   j                  d«      }t        j                  |«      }| j                   j	                  |dz
  t
        j                  «       	 | j                   j                  d«      }|sy |d   }|dv ry | j                   j                  d«      }t        j                  |«      }|dk(  r/| j                   j                  |dz
  «      dd  | j                  d<   y | j                   j	                  |dz
  t
        j                  «       Œº)NrH   r   )é�   éÙ   éd   Úcomment)r   r   r   rR   r6   r7   r8   rš   )r   rT   r   ÚmarkerÚtyps        r   rœ   zJpeg2KImageFile._parse_comment  s×   € Ø�g‰g�l‰l˜1‹oˆÜ—‘˜sÓ#ˆØ�‰�‰�V˜a‘Z¤§¡Ô-àØ—W‘W—\‘\ !“_ˆFÙØØ˜‘)ˆCØ�lÑ"àØ—'‘'—,‘,˜q“/ˆCÜ—]‘] 3Ó'ˆFØ�dŠ{à'+§w¡w§|¡|°F¸Q±JÓ'?ÀÀÐ'C�—	‘	˜)Ñ$Øà—‘—‘˜V a™Z¬¯©Ô5ð r   c                ó4   •— | j                   xs
 t        ‰| �  S r&   )r�   ÚsuperÚreduce)r   Ú	__class__s    €r   r²   zJpeg2KImageFile.reduce#  s   ø€ ð
 �|‰|Ò-œu™w™~Ð-r   c                ó   — || _         y r&   )r�   )r   Úvalues     r   r²   zJpeg2KImageFile.reduce*  s	   € àˆ�r   c                óÐ  — | j                   r¼| j                  r°d| j                  z  }|dz	  }t        | j                  d   |z   |z  «      t        | j                  d   |z   |z  «      f| _        | j                   d   }|d   d   | j                  | j
                  |d   d   |d   d   f}|d   d| j                  z   |d   |fg| _         t        j                  j                  | «      S )Nr   r   rN   rP   r•   rH   )r¤   r�   r9   r+   r—   rž   r	   Úload)r   ÚpowerÚadjustÚtÚt3s        r   r·   zJpeg2KImageFile.load.  sÝ   € Ø�9Š9˜ŸšØ˜Ÿ™Ñ%ˆEØ˜a‘ZˆFä�T—Y‘Y˜q‘\ FÑ*¨eÑ3Ó4Ü�T—Y‘Y˜q‘\ FÑ*¨eÑ3Ó4ðˆDŒJð —	‘	˜!‘ˆAØ�A‘$�q‘'˜4Ÿ<™<¨¯©°a¸±d¸1±g¸qÀ¹tÀA¹wÐGˆBØ˜A™$ ¨¯©Ñ 2°A°a±D¸"Ð=Ð>ˆDŒIä×"Ñ"×'Ñ'¨Ó-Ð-r   )r?   ÚNone)rB   rC   rD   ÚformatÚformat_descriptionr¨   rœ   Úpropertyr²   Úsetterr·   Ú__classcell__)r³   s   @r   r�   r�   Ù   sJ   ø„ Ø€FØ0Ðó.
ó`6ð, ó.ó ð.ð ‡]�]ñó ðö.r   r�   c                ó&   — | d d dk(  xs | d d dk(  S )NrP   r�   ri   r’   rF   )Úprefixs    r   Ú_acceptrÄ   ?  s+   € àˆr�ˆ
Ð)Ñ)ò 	BØ�#�2ˆ;ÐAÑAðr   c                óT  — | j                   }t        |t        «      r|j                  «       }|j	                  d«      s|j                  dd«      rd}nd}|j                  dd «      }|j                  dd «      }|j                  dd «      }|j                  d	d
«      }|j                  dd «      }	|	�5t        |	t        t        f«      rt        d„ |	D «       «      sd}
t        |
«      ‚|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«      }t        |t        «      r|j                  «       }|j                  dd«      }d}t        |d«      r	 |j                  «       }|||||	|||||||||||f| _        t        j                  | |dd| j                   z   d|fg«       y # t        $ r d}Y ŒNw xY w)Ns   .j2kÚno_jp2Fr‘   r“   ÚoffsetÚtile_offsetÚ	tile_sizeÚquality_modeÚratesÚquality_layersc              3  óH   K  — | ]  }t        |t        t        f«      –— Œ y ­wr&   )Ú
isinstancer9   Úfloat)Ú.0Úquality_layers     r   ú	<genexpr>z_save.<locals>.<genexpr>\  s    è ø€ ò 
Ø8EŒJ�}¤s¬E l×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Î   rA   Úencoder›   ÚgetÚlistÚtupleÚallÚ
ValueErrorÚhasattrrŸ   r¢   Úencoderconfigr	   Ú_saver+   )Úimr   Úfilenamerš   ÚkindrÇ   rÈ   rÉ   rÊ   rÌ   r"   rÓ   Ú	cblk_sizerÕ   rÖ   r×   rÙ   rÛ   rÜ   r­   rÝ   r¦   s                         r   rç   rç   J  s  € à�>‰>€Dä�(œCÔ Ø—?‘?Ó$ˆØ×Ñ˜Ô! T§X¡X¨h¸Ô%>Ø‰àˆà�X‰X�h Ó%€FØ—(‘(˜=¨$Ó/€KØ—‘˜ dÓ+€IØ—8‘8˜N¨GÓ4€LØ—X‘XÐ.°Ó5€NØÐ!Ü�>¤D¬% =Ô1Üñ 
ØIWô
ô 
ð =ˆÜ˜‹oÐà—h‘hÐ0°!Ó4€OØ—‘Ð)¨4Ó0€IØ—H‘H˜_¨dÓ3€MØ—8‘8˜N¨EÓ2€LØ—(‘(˜=¨&Ó1€KØ—(‘(˜=¨$Ó/€KØ
�(‰(�5˜!Ó
€CØ�X‰X�h Ó&€FØ�h‰h�yÓ!€GÜ�'œ3ÔØ—.‘.Ó"ˆØ
�(‰(�5˜%Ó
 €Cà	€BÜˆr�8Ôð	Ø—‘“ˆBð
 	ØØØØØØØØØØØØØ
ØØð!€BÔô& ‡O�O�B˜˜h¨°·±Ñ(8¸!¸TÐBÐCÕDøô- ò 	ØŠBð	ús   ÇH ÈH'È&H')z.jp2z.j2kz.jpcz.jpfz.jpxz.j2cz	image/jp2)r?   ztuple[tuple[int, int], str])rd   r9   re   r9   rf   r9   r?   zfloat | None)rÃ   r:   r?   r@   )rè   zImage.Imager   z	IO[bytes]ré   zstr | bytesr?   r¼   )Ú
__future__r   r.   r7   r'   Útypingr   r   r   Ú r   r	   r
   r   r   r`   rg   r‹   r�   rÄ   rç   Úregister_openr½   Úregister_saveÚregister_extensionsÚregister_mimerF   r   r   ú<module>ró      sÉ   ðõ  #ã 	Û 	Û ß "Ñ "ç 5Ó 5÷Gñ GóTó>5òF.ôZc.�i×)Ñ)ô c.óLó@EðN €× Ñ �O×*Ñ*¨O¸WÔ EØ €× Ñ �O×*Ñ*¨EÔ 2à €× Ñ Ø×ÑÒLôð €× Ñ �O×*Ñ*¨KÕ 8r   