U
    Å½„bR  ã                   @   s°   d dl Z d dl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lmZ dd	d
œZed ƒd Zdd„ Zdd„ ZG dd„ dejƒZe eje¡ e ejd¡ dd„ ZdS )é    Né   )ÚImageÚ	ImageFile)Úi8)Úi16be)Úi32be)Úo8ÚrawZjpeg)r   é   é   c                 C   s   t t|  dd … ƒS )Néüÿÿÿ)Úi32ÚPAD)Úc© r   ú7/tmp/pip-unpacked-wheel-_wxctax1/PIL/IptcImagePlugin.pyÚi#   s    r   c                 C   s(   | D ]}t dt|ƒ dd� qt ƒ  d S )Nz%02xú )Úend)Úprintr   )r   r   r   r   r   Údump'   s    r   c                   @   s4   e Zd ZdZdZdd„ Zdd„ Zdd„ Zd	d
„ ZdS )ÚIptcImageFileZIPTCzIPTC/NAAc                 C   s   t | j| ƒS )N)r   Úinfo)ÚselfÚkeyr   r   r   Úgetint7   s    zIptcImageFile.getintc                 C   s¬   | j  d¡}t|ƒsdS |d |d f}|d dksL|d dk sL|d dkrTtdƒ‚|d	 }|d
krntdƒ‚n6|dkr|d}n(|dkršt| j  |d ¡ƒ}n
t|d	ƒ}||fS )Nr
   )Nr   r   é   r   é   é	   zinvalid IPTC/NAA fileé   é„   z%illegal field length in IPTC/NAA fileé€   )ÚfpÚreadÚlenÚSyntaxErrorÚOSErrorr   Úi16)r   ÚsÚtagÚsizer   r   r   Úfield:   s    $

zIptcImageFile.fieldc           
   
   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 t| jd d ƒ}t| jd d ƒ}d| jkrÎt| 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 n. tk
�rn }	 ztdƒ|	‚W 5 d }	~	X Y nX |dk�r d||fdd| jd | jd ffg| _d S )N©é   é
   )r   é<   r   r   )r   éA   ÚLr   ZRGBr   ZCMYK)r   é   )r   é   )r   éx   zUnknown IPTC image compressionÚiptc)r"   Útellr+   r#   r   Ú
isinstanceÚlistÚappendr   Úmoder   Ú_sizeÚCOMPRESSIONÚKeyErrorr&   r*   Útile)
r   Úoffsetr)   r*   ÚtagdataZlayersÚ	componentÚidÚcompressionÚer   r   r   Ú_openT   s>    




 ÿzIptcImageFile._openc                 C   s2  t | jƒdks | jd d dkr,tj | ¡S | jd \}}}|\}}| j |¡ tjdd�\}}t 	|¡}|dkr‚| 
d| j ¡ |  ¡ \}}	|dkr˜qÒ|	dkr‚| j t|	d	ƒ¡}
|
s¸q‚| 
|
¡ |	t |
ƒ8 }	q˜q‚| ¡  z*t |¡�}| ¡  |j| _W 5 Q R X W 5 zt |¡ W n tk
�r*   Y nX X d S )
Nr   r   r5   F)Útextr	   zP5
%d %d
255
r,   i    )r$   r>   r   Úloadr"   ÚseekÚtempfileÚmkstempÚosÚfdopenÚwriter*   r+   r#   ÚminÚcloseÚunlinkr&   r   ÚopenÚim)r   Útyper>   ZboxÚencodingr?   Zo_fdÚoutfileÚor*   r(   Z_imr   r   r   rG   …   s6     

zIptcImageFile.loadN)	Ú__name__Ú
__module__Ú__qualname__ÚformatÚformat_descriptionr   r+   rE   rG   r   r   r   r   r   2   s   1r   z.iimc              	   C   sð   ddl }ddlm}m} d}t| tƒr,| jS t| |jƒrT| 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 | _| |¡| _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   Nr   )ÚJpegImagePluginÚTiffImagePluginÚ	photoshopi  c                   @   s   e Zd ZdS )zgetiptcinfo.<locals>.FakeImageN)rW   rX   rY   r   r   r   r   Ú	FakeImage×   s   r_   )ÚioÚ r\   r]   r7   r   r   ZJpegImageFileÚgetZTiffImageFiler)   r@   ZIPTC_NAA_CHUNKÚAttributeErrorr=   Ú	__class__ÚBytesIOr"   rE   Ú
IndexError)rR   r`   r\   r]   Údatar^   r_   r   r   r   Úgetiptcinfo³   s4    
rh   )rK   rI   ra   r   r   Ú_binaryr   r   r'   r   r   r   r<   r   r   r   r   Zregister_openrZ   Zregister_extensionrh   r   r   r   r   Ú<module>   s   
|