o
    Z#ûaR  ã                   @   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ÚrawÚjpeg)r   é   é   c                 C   s   t t|  dd … ƒS )Néüÿÿÿ)Úi32ÚPAD)Úc© r   ú5/usr/lib/python3/dist-packages/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 )ÚIptcImageFileÚ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s&|d dk s&|d dkr*tdƒ‚|d	 }|d
kr6tdƒ‚|dkr@d}||fS |dkrRt| j  |d ¡ƒ}||fS 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n2|r| j  |¡}nd }|| jv r?t| j| tƒr4| j|  |¡ n| j| |g| j|< n|| j|< qt| jd d ƒ}t| jd d ƒ}d| jv rht| jd d ƒd }nd}|dkrt|std| _	n|dkr€|r€d	| | _	n|d
kr‹|r‹d| | _	|  
d¡|  
d¡f| _z	t|  
d¡ }W n ty° }	 ztdƒ|	‚d }	~	ww |dkrÊd||fdd| jd | jd ffg| _d S d S )NT©é   é
   )r!   é<   r   r   )r!   éA   ÚLr!   ÚRGBr   Ú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,   ÚtagdataÚlayersÚ	componentÚidÚcompressionÚer   r   r   Ú_openT   sH   


ñ


€ÿ 
ÿÿzIptcImageFile._openc                 C   sh  t | jƒdks| jd d dkrtj | ¡S | jd \}}}|\}}| j |¡ tjdd�\}}t 	|¡}|dkrA| 
d| j ¡ 	 |  ¡ \}}	|d	krMn |	dkrl| j t|	d
ƒ¡}
|
s]n| 
|
¡ |	t |
ƒ8 }	|	dksQqB| ¡  z1t |¡�}| ¡  |j| _W d   ƒ n1 sŠw   Y  W zt |¡ W d S  ty¢   Y d S w zt |¡ W w  ty³   Y w w )Nr   r   r9   F)Útextr	   zP5
%d %d
255
Tr.   i    )r&   rB   r   Úloadr$   ÚseekÚtempfileÚmkstempÚosÚfdopenÚwriter,   r-   r%   ÚminÚcloser   ÚopenÚimÚunlinkr(   )r   ÚtyperB   ÚboxÚencodingrC   Úo_fdÚoutfileÚor,   r*   Ú_imr   r   r   rL   …   sL    

ûü

þ€ÿþÿzIptcImageFile.loadN)	Ú__name__Ú
__module__Ú__qualname__ÚformatÚformat_descriptionr   r-   rJ   rL   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ƒr*| j d¡}|r)| d¡}nt| |j	ƒrEz	| j
j|j }W n ttfyD   Y nw |du rKdS G dd„ dƒ}|ƒ } t| _i | _| |¡| _z|  ¡  W | jS  ttfyv   Y | jS w )	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)r_   r`   ra   r   r   r   r   Ú	FakeImage×   s    rg   )ÚioÚ rd   re   r;   r   r   ÚJpegImageFileÚgetÚTiffImageFiler+   rD   ÚIPTC_NAA_CHUNKÚAttributeErrorrA   Ú	__class__ÚBytesIOr$   rJ   Ú
IndexError)rV   rh   rd   re   Údatarf   rg   r   r   r   Úgetiptcinfo³   s<   

€ÿ
ýýrs   )rP   rN   ri   r   r   Ú_binaryr   r   r)   r   r   r   r@   r   r   r   r   Úregister_openrb   Úregister_extensionrs   r   r   r   r   Ú<module>   s   
|