U
    ¢A{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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-ajkjogh1/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r˜t| 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Ú|sÚd| _n2|dkrò|ròd| | _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�rˆd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r‚q¼|dkrl| j 
t|dƒ¡}|s¢ql| |¡ |t |ƒ8 }q‚qlt |¡�}| ¡  |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ƒr„z| j	j
|j }W n ttfk
r‚   Y nX |dkr�d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