U
    ڲg                     @  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lmZ d	d
dZdddddZdddddZdddddZdddddZdddddZG dd dejZeeje eejd  d!d" Zd#S )$    )annotations)BytesIO)Sequence   )Image	ImageFile)i16be)i32be)	deprecaterawZjpeg)r      strbytes)namereturnc                 C  s4   | dkrt dd dS dt d|  d}t|d S )NZPADzIptcImagePlugin.PAD          zmodule 'z' has no attribute '')r
   __name__AttributeError)r   msg r   7/tmp/pip-unpacked-wheel-xela2va7/PIL/IptcImagePlugin.py__getattr__   s
    
r   int)cr   c                 C  s   t d|  dd  S )Nr   )i32r   r   r   r   _i*   s    r   zint | bytesc                 C  s   t | tr| S | d S Nr   )
isinstancer   r   r   r   r   _i8.   s    r"   c                 C  s   t dd t| S ).. deprecated:: 10.2.0zIptcImagePlugin.ir   )r
   r   r   r   r   r   i2   s    
r$   zSequence[int | bytes]Nonec                 C  s2   t dd | D ]}tt|ddd qt  dS )r#   zIptcImagePlugin.dumpr   Z02x )endN)r
   printr"   )r   r$   r   r   r   dump8   s    
r)   c                   @  sH   e Zd ZdZdZdddddZdd	d
dZdd	ddZdd ZdS )IptcImageFileZIPTCzIPTC/NAAztuple[int, int]r   )keyr   c                 C  s   t | j| S )N)r   info)selfr+   r   r   r   getintI   s    zIptcImageFile.getintz"tuple[tuple[int, int] | None, int])r   c                 C  s   | j d}|dsdS |d |d f}|d dksB|d dkrNd	}t||d
 }|dkrld}t|n6|dkrzd}n(|dkrt| j |d }n
t|d
}||fS )Nr       r    r      r      )
r   r0         r            	      zinvalid IPTC/NAA filer2      z%illegal field length in IPTC/NAA file   )fpreadstripSyntaxErrorOSErrorr   i16)r-   stagr   sizer   r   r   fieldL   s"    


zIptcImageFile.fieldr%   c              
   C  s  | j  }|  \}}|r|dkr$q|r6| j |}nd }|| jkr|t| j| trf| j| | q| j| |g| j|< q || j|< q | jd d }| jd d }d| jkr| jd d d }nd}|dkr|sd| _n2|dkr|rd| | _n|d	kr|rd
| | _| 	d| 	df| _
zt| 	d }W n2 tk
rf }	 zd}
t|
|	W 5 d }	~	X Y nX |dkrdd| j ||fg| _d S )Nr6   
   )r2   <   r   r   )r2   A   Lr2   ZRGBr3   ZCMYK)r2      )r2      )r2   x   zUnknown IPTC image compressioniptc)r   r   )r;   tellrD   r<   r,   r!   listappend_moder.   _sizeCOMPRESSIONKeyErrorr?   rC   tile)r-   offsetrB   rC   tagdataZlayers	componentidcompressioner   r   r   r   _openh   s>    




zIptcImageFile._openc              	   C  s   t | jdks | jd d dkr,tj| S | jd dd  \}}| j| t }|dkrl|d| j  | 	 \}}|dkrq|dkrl| j
t|d}|sql|| |t |8 }qqlt|}|  |j| _W 5 Q R X d S )	Nr   r   rM   r0   r   s   P5
%d %d
255
rE   i    )lenrU   r   loadr;   seekr   writerC   rD   r<   minr   openim)r-   rV   rZ   otyperC   rA   Z_imr   r   r   r^      s&     
zIptcImageFile.loadN)	r   
__module____qualname__formatformat_descriptionr.   rD   r\   r^   r   r   r   r   r*   E   s   /r*   z.iimc              	   C  s   ddl m}m} d}t| tr$| jS t| |jrL| jd}|r|d}n8t| |jrz| j	j
|j }W n ttfk
r   Y nX |dkrdS G dd d}| } t| _i | _t|| _z|   W n ttfk
r   Y nX | j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   rf   rg   r   r   r   r   	FakeImage   s   rm   ) rj   rk   r!   r*   r,   ZJpegImageFilegetZTiffImageFilerB   rW   ZIPTC_NAA_CHUNKr   rT   	__class__r   r;   r\   
IndexError)rc   rj   rk   datarl   rm   r   r   r   getiptcinfo   s2    

rs   N)
__future__r   ior   typingr   rn   r   r   _binaryr   r@   r	   r   Z
_deprecater
   rS   r   r   r"   r$   r)   r*   Zregister_openrh   Zregister_extensionrs   r   r   r   r   <module>   s    
p