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   P/home/air/sos_test/back/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  s4  ddl m}m} d}i }t| tr&| j D ]\}}t|tr#|||< q|S t| |jr:| j	d}|r9|	d}nt| |j
rSz	| jj|j }W n	 tyR   Y nw |du rYdS G dd d}| }	t|	_tt|	}
i |
_t||
_z|
  W n ttfy   Y nw |
j D ]\}}t|tr|||< q|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TiffImagePluginN	photoshopi  c                   @  s   e Zd ZdS )zgetiptcinfo.<locals>.FakeImageN)re   rf   rg   r   r   r   r   	FakeImage   s    ro   ) rl   rm   rB   r   r   itemsrU   JpegImageFilegetTiffImageFiletag_v2_tagdataIPTC_NAA_CHUNKrH   	__class__r   r   r*   rR   
IndexError)r`   rl   rm   datar   kvrn   ro   fake_imiptc_imr   r   r   getiptcinfo   sL   






r   N)r   r   r   r   )r`   rj   r   rk   )
__future__r   ior   typingr   rp   r   r   _binaryr   r/   r	   r   rG   r   r   register_openrh   register_extensionr   r   r   r   r   <module>   s   

	