o
    Ih,                     @  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rawZjpeg)r      cbytesreturnintc                 C  s   t d|  dd  S )Ns       )i32)r    r   >/usr/local/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 )IptcImageFileZ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    ZCMYK)r   A   )r      )r      )r   x   zUnknown IPTC image compressionZiptc)r   r   )r(   tellr2   r)   r   
isinstancelistappend_moder   _sizeCOMPRESSIONKeyErrorr,   r   Z_Tiler1   tile)r   offsetr/   r1   ZtagdataZlayers	componentbandcompressioner0   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
Tr4   i    r7   )rE   argsr>   tupler(   seekrF   r   writer1   r2   r)   minlenr   opennewZgetmodebandsmodemergeloadimr   )
r   rM   rI   rH   otyper1   r.   Z_imZbandsr   r   r   rW      s<   

zIptcImageFile.loadN)r   r   r   r   )r   r   )r   r3   )r   rL   )	__name__
__module____qualname__formatformat_descriptionr   r2   rK   rW   r   r   r   r   r   *   s    


3r   z.iimrX   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)r[   r\   r]   r   r   r   r   	FakeImage   s    re   ) rb   rc   r>   r   r   itemsrN   ZJpegImageFilegetZTiffImageFileZtag_v2Z_tagdataZIPTC_NAA_CHUNKrD   	__class__r   r   r(   rK   
IndexError)rX   rb   rc   datar   kvrd   re   Zfake_imZiptc_imr   r   r   getiptcinfo   sL   






rn   N)r   r   r   r   )rX   r`   r   ra   )
__future__r   ior   typingr   rf   r   r   _binaryr   r-   r	   r   rC   r   r   Zregister_openr^   Zregister_extensionrn   r   r   r   r   <module>   s   

	{