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   K/home/air/sos/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}|dsdS |d |d f}|d dks!|d dvr'd	}t||d
 }|dkr5d}t||dkr?d}||fS |dkrQt| 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  }|  \}}|r|dkrn2|r| j |}nd }|| jv r?t| j| tr4| j| | n| j| |g| j|< n|| j|< q| jd d }| jd d }|dkr_|s_d| _d }n$|dkri|rid| _n	|d	krr|rrd
| _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   _openM   sL   





zIptcImageFile._openImage.core.PixelAccess | Nonec           
      C  s:  | j r| j d j}t|tsJ |\}}| j| j d j t }|dkr-|d| j	  	 | 
 \}}|dkr9n |dkrX| jt|d}|sIn|| |t|8 }|dks=q.t|.}|d ur}t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_      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    


3r   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   

	{