o
    
i%                     @  s   d dl mZ d dlmZ d dlmZ ddlmZmZ ddl	m
Z ddl	mZ dd	d
ZdddZG dd dejZeeje eejd dddZdS )    )annotations)BytesIO)cast   )Image	ImageFile)i16be)i32berawjpeg)r      cbytesreturnintc                 C  s   t d|  dd  S )Ns       )i32)r    r   Q/home/ubuntu/SoloSpeech/.venv/lib/python3.10/site-packages/PIL/IptcImagePlugin.py_i!   s   r   c                   @  s<   e Zd ZdZdZdddZdd
dZdddZdddZdS )IptcImageFileIPTCzIPTC/NAAkeytuple[int, int]r   r   c                 C  s   t | j| S )N)r   info)selfr   r   r   r   getint.   s   zIptcImageFile.getint"tuple[tuple[int, int] | None, int]c                 C  s   | j d usJ | j d}|dsdS |d |d f}|d dks(|d dvr.d	}t||d
 }|dkr<d}t||dkrFd}||fS |dkrXt| j |d }||fS t|d
}||fS )Nr       )Nr   r      r      )
r   r         r            	      zinvalid IPTC/NAA filer!      z%illegal field length in IPTC/NAA file   )fpreadstripSyntaxErrorOSErrorr   i16)r   stagmsgsizer   r   r   field1   s(   

zIptcImageFile.fieldNonec              
   C  s  | j d usJ 	 | j  }|  \}}|r|dkrn2|r#| j |}nd }|| jv rFt| j| tr;| j| | n| j| |g| j|< n|| j|< q| jd d }| jd d }|dkrf|sfd| _d }n$|dkrp|rpd| _n	|d	kry|ryd
| _d| jv r| jd d d }nd}| 	d| 	df| _
z	t| 	d }W n ty }	 zd}
t|
|	d }	~	ww |dkrtdd| j |||fg| _d S d S )NTr%   
   )r!   <   r   r   Lr!   RGBr"   CMYK)r!   A   )r!      )r!      )r!   x   zUnknown IPTC image compressioniptc)r   r   )r*   tellr4   r+   r   
isinstancelistappend_moder   _sizeCOMPRESSIONKeyErrorr.   r   _Tiler3   tile)r   offsetr1   r3   tagdatalayers	componentbandcompressioner2   r   r   r   _openN   sN   





zIptcImageFile._openImage.core.PixelAccess | Nonec                 C  sL  | j r| j d j}t|tsJ |\}}| jd usJ | j| j d j t }|dkr4|d| j	  	 | 
 \}}|dkr@n |dkr_| jt|d}|sPn|| |t|8 }|dksDq5t|0}|d urtd|j	gt| j }	||	|< t| j|	}
n|}
|
  |
j| _W d    n1 sw   Y  g | _ tj| S )Nr   r
   s   P5
%d %d
255
Tr6   i    r9   )rJ   argsrB   tupler*   seekrK   r   writer3   r4   r+   minlenr   opennewgetmodebandsmodemergeloadimr   )r   rT   rP   rO   otyper3   r0   _imbandsr`   r   r   r   r_      s@   

	zIptcImageFile.loadN)r   r   r   r   )r   r   )r   r5   )r   rS   )	__name__
__module____qualname__formatformat_descriptionr   r4   rR   r_   r   r   r   r   r   *   s    


4r   z.iimr`   ImageFile.ImageFile1dict[tuple[int, int], bytes | list[bytes]] | Nonec              	   C  s  ddl m}m} d}t| trdd | j D S t| |jr-| jd}|r,|d}nt| |j	rFz	| j
j|j }W n	 tyE   Y nw |du rLdS G dd	 d	}| }t|_tt|}i |_t||_z|  W n ttfyw   Y nw d
d |j D S )z
    Get IPTC information from TIFF, JPEG, or IPTC file.

    :param im: An image containing IPTC data.
    :returns: A dictionary containing IPTC information, or None if
        no IPTC information block was found.
    r   )JpegImagePluginTiffImagePluginNc                 S      i | ]\}}t |tr||qS r   rB   rU   .0kvr   r   r   
<dictcomp>        zgetiptcinfo.<locals>.<dictcomp>	photoshopi  c                   @  s   e Zd ZdS )zgetiptcinfo.<locals>.FakeImageN)re   rf   rg   r   r   r   r   	FakeImage   s    rw   c                 S  rn   r   ro   rp   r   r   r   rt      ru   ) rl   rm   rB   r   r   itemsJpegImageFilegetTiffImageFiletag_v2_tagdataIPTC_NAA_CHUNKrH   	__class__r   r   r*   rR   
IndexError)r`   rl   rm   datarv   rw   fake_imiptc_imr   r   r   getiptcinfo   s:   




r   N)r   r   r   r   )r`   rj   r   rk   )
__future__r   ior   typingr   rx   r   r   _binaryr   r/   r	   r   rG   r   r   register_openrh   register_extensionr   r   r   r   r   <module>   s   

	