o
    Z#ûa+o  ã                   @   s¬  d dl Z d dlZd dlZd dlZd dlZd dl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 ddlmZ ddlmZ ddlmZ dd	„ Zd
d„ Zdd„ Zdd„ Zdd„ Zi dddef“dddef“dddef“dddef“ddd ef“d!d"d#ef“d$d%d&ef“d'd(d)ef“d*d+“d,d-d.ef“d/d0d1ef“d2d3d4ef“d5d6d7ef“d8d9d:ef“d;d<d=ef“d>d?d@ef“dAdB“i dCdD“dEdF“dGdH“dIdJ“dKdL“dMdN“dOdP“dQdR“dSdT“dUdVdWef“dXddYef“dZd[d\ef“d]d^d_ef“d`dadbef“dcdddeef“dfdgdhef“didjdkef“¥i dldmdnef“dodpdqef“drdsdtef“dudvdwef“dxdydzef“d{d|d}ef“d~dd€ef“d�d‚dƒef“d„d…d†ef“d‡dˆd‰ef“dŠd‹dŒef“d�dŽd�ef“d�d‘d’ef“d“d”d•ef“d–d—“d˜d™“dšd›“¥dœd�dždŸd d¡d¢d£d¤d¥d¦dd§efd¨œ¥Zd©dª„ ZG d«d¬„ d¬ejƒZd­d®„ Zd¯d°„ Zd±d±d²d²d³d´dµœZd¶Z d dd·d¸œZ!d¹dº„ Z"d»d¼„ Z#d½d¾„ Z$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 )Æé    Né   )ÚImageÚ	ImageFileÚTiffImagePlugin)Úi16be)Úi32be)Úo8)Úpresetsc                 C   s&   t | j d¡ƒd }t | j|¡ d S )Né   )Úi16ÚfpÚreadr   Ú
_safe_read)ÚselfÚmarkerÚn© r   ú5/usr/lib/python3/dist-packages/PIL/JpegImagePlugin.pyÚSkip6   s   r   c                 C   sð  t | j d¡ƒd }t | j|¡}d|d@  }|| j|< | j ||f¡ |dkrr|d d… dkrrt |dƒ | jd< }t	|d	ƒ| jd
< z|d }t |dƒt |dƒf}W n
 t
y\   Y �n6w |dkrf|| jd< || jd< || jd< �n |dkrŠ|d d… dkrŠd| jvrˆ|| jd< �n|dkrœ|d d… dkrœ|| jd< nö|dkr¯|d d… dkr¯| j |¡ nã|dk�rB|d d… dk�rBd}| j di ¡}	|||d … dk�rAzZ|d7 }t ||ƒ}
|d7 }|| }|d| 7 }||d@ 7 }t||ƒ}|d7 }|||| … }|
dk�rt|d ƒd! t |dƒt|dƒd! t |dƒd"œ}||	|
< ||7 }||d@ 7 }W n tj�y6   Y nw |||d … dksÑnP|d#k�ro|d d… d$k�rot |dƒ| jd%< z|d& }W n
 t�yh   Y n*w || jd'< n#|dk�r’|d d… d(k�r’|dd … | jd)< | j ¡ | d | jd*< d| jv�rôd| jv �röz@|  ¡ }|d+ }|d, }zt|d  ƒ|d  }W n t�yÃ   |}Y nw t |¡�rÌt‚|d-k�rÕ|d.9 }||f| jd< W d S  tttttf�yó   d/| jd< Y d S w d S d S )0Nr
   zAPP%dé   éàÿ  é   s   JFIFé   Újfifé   Újfif_versioné   é   é
   r   ÚdpiÚ	jfif_unitÚjfif_densityéáÿ  s   Exif Úexiféâÿ  s   FPXR Úflashpixé   ó   ICC_PROFILE éíÿ  é   s   Photoshop 3.0 Ú	photoshops   8BIMií  r   i   )ÚXResolutionÚDisplayedUnitsXÚYResolutionÚDisplayedUnitsYéîÿ  s   AdobeÚadobeé   Úadobe_transforms   MPF ÚmpÚmpoffseti(  i  é   gR¸…ëQ@)éH   r6   )r   r   r   r   r   ÚappÚapplistÚappendÚinfoÚdivmodÚ	ExceptionÚicclistÚ
setdefaultÚi32ÚstructÚerrorÚ
IndexErrorÚtellÚgetexifÚfloatÚ	TypeErrorÚmathÚisnanÚ
ValueErrorÚKeyErrorÚSyntaxErrorÚZeroDivisionError)r   r   r   Úsr7   Úversionr    r!   Úoffsetr*   ÚcodeÚname_lenÚsizeÚdatar2   r#   Úresolution_unitÚx_resolutionr   r   r   r   ÚAPP;   s¨   
ÿ



€


üÿç€ÿÿ
ûñrV   c                 C   sJ   t | j d¡ƒd }t | j|¡}|| jd< || jd< | j d|f¡ d S )Nr
   ÚcommentÚCOM)	r   r   r   r   r   r:   r7   r8   r9   )r   r   r   rM   r   r   r   rX   ³   s
   

rX   c           	      C   sŒ  t | j d¡ƒd }t | j|¡}t |dƒt |dƒf| _|d | _| jdkr/td| j› d�ƒ‚|d | _| jdkr=d	| _	n| jdkrFd
| _	n| jdkrOd| _	n	td| j› d�ƒ‚|dv rfd | j
d< | j
d< | jr›| j ¡  | jd d t| jƒkr‘g }| jD ]}| |dd … ¡ qd |¡}nd }|| j
d< g | _tdt|ƒdƒD ] }|||d … }| j |d |d d |d d@ |d f¡ q£d S )Nr
   r5   r   r   r   zcannot handle z-bit layersr   ÚLÚRGBr   ÚCMYKz-layer images)éÂÿ  éÆÿ  éÊÿ  éÎÿ  ÚprogressiveÚprogressioné   r)   ó    Úicc_profileé   é   r   )r   r   r   r   r   Ú_sizeÚbitsrK   ÚlayersÚmoder:   r=   ÚsortÚlenr9   ÚjoinÚrangeÚlayer)	r   r   r   rM   ÚprofileÚprd   ÚiÚtr   r   r   ÚSOF¾   s<   








.ýrt   c                    sØ   t | j d¡ƒd }t | j|¡}t|ƒrj|d }|d dkr!dnd}d|d  }t|ƒ|k r3tdƒ‚t |dkr;dnd|d|… ¡‰ tj	d	krP|dkrPˆ  
¡  ‡ fd
d„tD ƒ| j|d@ < ||d … }t|ƒsd S d S )Nr
   r   rf   r   é@   zbad quantization table markerÚBÚHÚlittlec                    s   g | ]}ˆ | ‘qS r   r   )Ú.0rr   ©rS   r   r   Ú
<listcomp>  ó    zDQT.<locals>.<listcomp>r   )r   r   r   r   r   rl   rK   ÚarrayÚsysÚ	byteorderÚbyteswapÚzigzag_indexÚquantization)r   r   r   rM   ÚvÚ	precisionÚ	qt_lengthr   rz   r   ÚDQTî   s    ör†   iÀÿ  ÚSOF0zBaseline DCTiÁÿ  ÚSOF1zExtended Sequential DCTr\   ÚSOF2zProgressive DCTiÃÿ  ÚSOF3zSpatial losslessiÄÿ  ÚDHTzDefine Huffman tableiÅÿ  ÚSOF5zDifferential sequential DCTr]   ÚSOF6zDifferential progressive DCTiÇÿ  ÚSOF7zDifferential spatialiÈÿ  )ÚJPGÚ	ExtensionNiÉÿ  ÚSOF9zExtended sequential DCT (AC)r^   ÚSOF10zProgressive DCT (AC)iËÿ  ÚSOF11zSpatial lossless DCT (AC)iÌÿ  ÚDACz%Define arithmetic coding conditioningiÍÿ  ÚSOF13z Differential sequential DCT (AC)r_   ÚSOF14z!Differential progressive DCT (AC)iÏÿ  ÚSOF15zDifferential spatial (AC)iÐÿ  )ÚRST0z	Restart 0NiÑÿ  )ÚRST1z	Restart 1NiÒÿ  )ÚRST2z	Restart 2NiÓÿ  )ÚRST3z	Restart 3NiÔÿ  )ÚRST4z	Restart 4NiÕÿ  )ÚRST5z	Restart 5NiÖÿ  )ÚRST6z	Restart 6Ni×ÿ  )ÚRST7z	Restart 7NiØÿ  )ÚSOIzStart of imageNiÙÿ  )ÚEOIzEnd of imageNéÚÿ  ÚSOSzStart of scaniÛÿ  zDefine quantization tableiÜÿ  ÚDNLzDefine number of linesiÝÿ  ÚDRIzDefine restart intervaliÞÿ  ÚDHPzDefine hierarchical progressionißÿ  ÚEXPzExpand reference componentr   ÚAPP0zApplication segment 0r"   ÚAPP1zApplication segment 1r$   ÚAPP2zApplication segment 2iãÿ  ÚAPP3zApplication segment 3iäÿ  ÚAPP4zApplication segment 4iåÿ  ÚAPP5zApplication segment 5iæÿ  ÚAPP6zApplication segment 6içÿ  ÚAPP7zApplication segment 7ièÿ  ÚAPP8zApplication segment 8iéÿ  ÚAPP9zApplication segment 9iêÿ  ÚAPP10zApplication segment 10iëÿ  ÚAPP11zApplication segment 11iìÿ  ÚAPP12zApplication segment 12r(   ÚAPP13zApplication segment 13r/   ÚAPP14zApplication segment 14iïÿ  ÚAPP15zApplication segment 15iðÿ  )ÚJPG0zExtension 0Niñÿ  )ÚJPG1zExtension 1Niòÿ  )ÚJPG2zExtension 2N)ÚJPG3zExtension 3N)ÚJPG4zExtension 4N)ÚJPG5zExtension 5N)ÚJPG6zExtension 6N)ÚJPG7zExtension 7N)ÚJPG8zExtension 8N)ÚJPG9zExtension 9N)ÚJPG10zExtension 10N)ÚJPG11zExtension 11N)ÚJPG12zExtension 12N)ÚJPG13zExtension 13NÚComment)ióÿ  iôÿ  iõÿ  iöÿ  i÷ÿ  iøÿ  iùÿ  iúÿ  iûÿ  iüÿ  éýÿ  iþÿ  c                 C   s   | dd… dkS )Nr   r5   s   ÿØÿr   )Úprefixr   r   r   Ú_acceptK  s   rÉ   c                   @   sL   e Zd 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dS )ÚJpegImageFileÚJPEGzJPEG (ISO 10918)c                 C   s6  | j  d¡}t|ƒstdƒ‚d}d | _| _g | _i | _i | _i | _	i | _
g | _g | _	 |d }|dkrA|| j  d¡ }t|ƒ}n| j  d¡}q+|tv r€t| \}}}|d ur\|| |ƒ |dkry| j}| jd	krjd
}dd| j d|dffg| _d S | j  d¡}n|dksˆ|dkr‹d}n|dkr–| j  d¡}ntdƒ‚q,)Nr5   znot a JPEG fileó   ÿr   Téÿ   r   r¢   r[   úCMYK;IÚjpeg©r   r   Ú iÿÿ  i ÿ  zno marker found)r   r   rÉ   rK   rh   ri   ro   Ú
huffman_dcÚ
huffman_acr‚   r7   r8   r=   r   ÚMARKERrj   rR   Útile)r   rM   rr   ÚnameÚdescriptionÚhandlerÚrawmoder   r   r   Ú_openY  sH   


ãzJpegImageFile._openc                 C   s.   | j  |¡}|stjrt| dƒsd| _dS |S )z›
        internal: read more image data
        For premature EOF and LOAD_TRUNCATED_IMAGES adds EOI marker
        so libjpeg can finish decoding
        Ú_endedTs   ÿÙ)r   r   r   ÚLOAD_TRUNCATED_IMAGESÚhasattrrÛ   )r   Ú
read_bytesrM   r   r   r   Ú	load_readŒ  s
   zJpegImageFile.load_readc                 C   s`  t | jƒdkr	d S | jrd S | jd \}}}}d}| j}|d dkr-|dv r-|| _|df}|r�t| jd |d  | jd |d  ƒ}dD ]}	||	krL nqD|d |d |d |d  |	 d |	 |d  |d |d  |	 d |	 |d  f}| jd |	 d |	 | jd |	 d |	 f| _|	}||||fg| _|df| _dd|d | |d | f}
| j|
fS )	Nr   r   rZ   )rY   ÚYCbCrrÑ   )r   r   r
   r   r
   r5   )rl   rÕ   ÚdecoderconfigrR   rj   Úminrg   )r   rj   rR   ÚdÚeÚoÚaÚscaleÚoriginal_sizerM   Úboxr   r   r   Údraftœ  s6   &ÿ""ü.

zJpegImageFile.draftc                 C   sâ   t  ¡ \}}t |¡ tj | j¡rt dd|| jg¡ nt	dƒ‚z/t
 |¡�}| ¡  |j| _W d   ƒ n1 s:w   Y  W zt |¡ W n tyP   Y nw zt |¡ W w  tya   Y w w | jj| _| jj| _g | _d S )NÚdjpegú-outfilezInvalid Filename)ÚtempfileÚmkstempÚosÚcloseÚpathÚexistsÚfilenameÚ
subprocessÚ
check_callrI   r   ÚopenÚloadÚimÚunlinkÚOSErrorrj   rR   rg   rÕ   )r   Úfrñ   Ú_imr   r   r   Ú
load_djpegÁ  s0   

þ€ÿþÿ


zJpegImageFile.load_djpegc                 C   ó   t | ƒS ©N)Ú_getexif©r   r   r   r   r   Û  ó   zJpegImageFile._getexifc                 C   rþ   rÿ   )Ú_getmpr  r   r   r   r  Þ  r  zJpegImageFile._getmpc                 C   sB   | j D ]\}}|dkr| dd¡\}}|dkr|  |¡  S qi S )z˜
        Returns a dictionary containing the XMP tags.
        Requires defusedxml to be installed.
        :returns: XMP tags in a dictionary.
        r©   ó    r   s   http://ns.adobe.com/xap/1.0/)r8   ÚrsplitÚ_getxmp)r   ÚsegmentÚcontentr   Úxmp_tagsr   r   r   Úgetxmpá  s   €zJpegImageFile.getxmpN)Ú__name__Ú
__module__Ú__qualname__ÚformatÚformat_descriptionrÚ   rß   rê   rý   r   r  r
  r   r   r   r   rÊ   T  s    3%rÊ   c                 C   s   d| j vrd S |  ¡  ¡ S )Nr#   )r:   rD   Ú_get_merged_dictr  r   r   r   r   ð  s   
r   c              
   C   sö  z| j d }W n
 ty   Y d S w t |¡}| d¡}|d d… dkr&dnd}zt |¡}| |j¡ | 	|¡ t
|ƒ}W n tyO } ztdƒ|‚d }~ww z|d }W n tyg } ztd	ƒ|‚d }~ww g }	z|d
 }
td|ƒD ]n}t |› d�|
|d ¡}d}t
t||ƒƒ}t|d d@ ƒt|d d@ ƒt|d d@ ƒ|d d@ d? |d d@ d? |d d@ dœ}|d dkrÁd|d< ntdƒ‚ddddd d!d"d#œ}| |d$ d%¡|d$< ||d< |	 |¡ qt|	|d
< W |S  tyú } ztd&ƒ|‚d }~ww )'Nr3   r   r   s   MM *ú>ú<z)malformed MP Index (unreadable directory)é°  z(malformed MP Index (no number of images)i°  r   ÚLLLHHrf   )Ú	AttributeÚSizeÚ
DataOffsetÚEntryNo1ÚEntryNo2r  l        i   @i    i   é   i   é   iÿÿÿ )ÚDependentParentImageFlagÚDependentChildImageFlagÚRepresentativeImageFlagÚReservedÚImageDataFormatÚMPTyper   rË   z!unsupported picture format in MPOÚ	Undefinedz Large Thumbnail (VGA Equivalent)z$Large Thumbnail (Full HD Equivalent)zMulti-Frame Image (Panorama)zMulti-Frame Image: (Disparity)z Multi-Frame Image: (Multi-Angle)zBaseline MP Primary Image)r   i  i  i  i  i  i   r!  ÚUnknownz!malformed MP Index (bad MP Entry))r:   rJ   ÚioÚBytesIOr   r   ÚImageFileDirectory_v2ÚseekÚnextr÷   Údictr<   rK   rn   r@   Úunpack_fromÚzipÚboolÚgetr9   )r   rS   Úfile_contentsÚheadÚ
endiannessr:   r3   rä   ÚquantÚ	mpentriesÚrawmpentriesÚentrynumÚunpackedentryÚlabelsÚmpentryÚmpentryattrÚ	mptypemapr   r   r   r  ö  sv   ÿ




€ÿ
€ÿÿ
ú
ù	
û
€ÿr  rY   rZ   rÎ   rà   )Ú1rY   rZ   ÚRGBXr[   rà   )@r   r   r   re   r)   r   r  é   r
   r   r   rb   rf   é   é   é*   r5   r   r&   é   é   é   é)   é+   é	   r1   é   r  é   é(   é,   é5   r   é   é   é    é'   é-   é4   é6   é   é   é!   é&   é.   é3   é7   é<   é   é"   é%   é/   é2   é8   é;   é=   é#   é$   é0   é1   é9   é:   é>   é?   r
   ))r   r   r   r   r   r   )r
   r   r   r   r   r   )r
   r
   r   r   r   r   c                 C   s   t  dt¡ | S )Nzpconvert_dict_qtables is deprecated and will be removed in Pillow 10(2023-07-01). Conversion is no longer needed.)ÚwarningsÚwarnÚDeprecationWarning©Úqtablesr   r   r   Úconvert_dict_qtables\  s
   ýro  c                 C   sZ   t | dƒr
| jdv rdS | jd dd… | jd dd…  | jd dd…  }t |d¡S )Nri   )r   r   éÿÿÿÿr   r   r5   r
   )rÝ   ri   ro   Ú	samplingsr-  )rø   Úsamplingr   r   r   Úget_samplinge  s   6rs  c                 C   sr  zt | j }W n ty } z
td| j› d�ƒ|‚d }~ww | j}dd„ | dd¡D ƒ}| dd¡}| d	d¡}| d
¡}	|dkrHd}d}d}	n;|tv r^t| }
d}|
 d	d¡}|
 d¡}	n%t|tƒsgt	dƒ‚|tv rst|  d	d¡}t|	t
ƒrƒ|	tv rƒt|	  d¡}	|dkrŠd}n&|dkr‘d}n|dkr˜d}n|dkrŸd}n|dkr°| jdkr¬t	dƒ‚t| ƒ}dd„ }|	dkrÇ| jdkrÁt	dƒ‚t| dd ƒ}	||	ƒ}	d}| d¡}|�rd}d}|| }g }|rò| |d |… ¡ ||d … }|sád}|D ]&}t dd| t|ƒ ¡}|d| d t|ƒ tt|ƒƒ | 7 }|d7 }qö| d d!¡�p)| d"d!¡}| d#d!¡}| d$d¡}t|tjƒ�rA| ¡ }||| d%d¡|| d&d¡|d |d ||	||f| _d}|�sc|�r—| jd'k�rvd(| jd  | jd  }n!|d)k�s€|dk�r�d| jd  | jd  }n
| jd | jd  }ttj|t|ƒd* t|ƒd ƒ}t | |d+d| j d|fg|¡ d S ),Nzcannot write mode z as JPEGc                 S   s   g | ]}t |ƒ‘qS r   )Úround)ry   Úxr   r   r   r{   |  r|   z_save.<locals>.<listcomp>r   rÐ   Úqualityrp  Úsubsamplingrn  Úkeepr‚   zInvalid quality settingz4:4:4r   z4:2:2r   z4:2:0r
   z4:1:1rË   z3Cannot use 'keep' when original image is not a JPEGc                    sH  ˆd u rˆS t ˆtƒr7zdd„ ˆ ¡ D ƒ‰ W n ty' } ztdƒ|‚d }~ww ‡ fdd„tdtˆ ƒdƒD ƒ‰t ˆtttfƒr¢t ˆtƒrR‡fdd„ttˆƒƒD ƒ‰n	t ˆtƒr[tˆƒ‰dtˆƒ  k rjdk sotd	ƒ‚ td	ƒ‚t	ˆƒD ],\}}zt|ƒdkr€t
‚t d
|¡}W n t
y˜ } ztdƒ|‚d }~ww t|ƒˆ|< qsˆS d S )Nc                 S   s.   g | ]}|  d d¡d   ¡ D ]}t|ƒ‘qqS )ú#r   r   )ÚsplitÚint)ry   ÚlineÚnumr   r   r   r{   §  s    ýþÿz3_save.<locals>.validate_qtables.<locals>.<listcomp>zInvalid quantization tablec                    s   g | ]
}ˆ ||d  … ‘qS )ru   r   )ry   rM   )Úlinesr   r   r{   ¯  s    r   ru   c                    s   g | ]
}|ˆ v rˆ | ‘qS r   r   )ry   Úkeyrm  r   r   r{   ²  s    r   z$None or too many quantization tablesrw   )Ú
isinstanceÚstrÚ
splitlinesrI   rn   rl   ÚtupleÚlistr)  Ú	enumeraterF   r}   )rn  rä   ÚidxÚtabler   )r~  rn  r   Úvalidate_qtables¢  sF   

þ
€ÿ


ÿ
ÿ
€ÿîz_save.<locals>.validate_qtablesrc   rd   r)   rÇ   z>Hs   ÿâr'   r`   Fra   Úoptimizer#   ÚsmoothÚ
streamtyper[   r   é_   r   rÏ   )ÚRAWMODErj   rJ   rú   Úencoderinfor-  r	   r€  r{  rI   r�  r  rs  Úgetattrr9   r@   Úpackrl   r   r   ÚExifÚtobytesÚencoderconfigrR   Úmaxr   ÚMAXBLOCKÚ_save)rø   r   ró   rÙ   rä   r:   r   rv  rw  rn  Úpresetrˆ  Úextrard   ÚICC_OVERHEAD_LENÚMAX_BYTES_IN_MARKERÚMAX_DATA_BYTES_IN_MARKERÚmarkersrr   r   rR   r`   r‰  r#   Úbufsizer   r   r   r–  s  sÄ   €ÿ


"

þÿþý
üûÿ


õ $r–  c                 C   s@   |   ¡ }t dd||g¡ zt |¡ W d S  ty   Y d S w )NÚcjpegrì   )Ú_dumprô   rõ   rï   rù   rú   )rø   r   ró   rí   r   r   r   Ú_save_cjpeg  s   ÿr   c              	   C   sx   t | |ƒ}z| ¡ }|d dkrddlm} | ||¡}W |S W |S  ttfy-   Y |S  ty;   t 	d¡ Y |S w )Nr  r   )ÚMpoImageFilezTImage appears to be a malformed MPO file, it will be interpreted as a base JPEG file)
rÊ   r  ÚMpoImagePluginr¡  ÚadoptrF   rB   rK   rj  rk  )r   ró   rø   Úmpheaderr¡  r   r   r   Újpeg_factory  s$   
	òøûÿûr¥  )z.jfifz.jpez.jpgz.jpegz
image/jpeg)NN),r}   r$  rG   rï   r@   rô   r~   rí   rj  rÑ   r   r   r   Ú_binaryr   r   r   r?   r   ÚJpegPresetsr	   r   rV   rX   rt   r†   rÔ   rÉ   rÊ   r   r  r�  r�   rq  ro  rs  r–  r   r¥  Úregister_openr  Úregister_saveÚregister_extensionsÚregister_mimer   r   r   r   Ú<module>   sD  !x0
ÿ
þ
ý
ü
û
ú
ù
ø	÷

ö
õ
ô
ó
ò
ñ
ðïîíìëêéèçæ
å
ä
ã
â
á
 à
!ß
"Þ
#Ý
$Ü
%Û
&Ú
'Ù
(Ø
)×
*Ö
+Õ
,Ô
-Ó
.Ò
/Ñ
0Ð1Ï2Î3Í4ÁC	 Jú
ý	  
