B
    0\e                 @   s   d dl mZ ddlmZmZ ddlmZmZm	Z
mZ d dlZd dlZd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 )    )print_function   )Image	ImageFile)i8i16bei32beo8Nz0.3rawZjpeg)r         c             C   s   t t|  dd  S )N)i32PAD)c r   2lib/python3.7/site-packages/PIL/IptcImagePlugin.pyi&   s    r   c             C   s,   x | D ]}t dt| dd qW 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   getint9   s    zIptcImageFile.getintc             C   s   | j d}t|sdS t|d t|d f}t|d dksX|d dk sX|d dkr`tdt|d	 }|d
kr~tdn<|dkrd}n.|dkrt| j |d }nt|d	d  }||fS )Nr   )Nr   r      r      	   zinvalid IPTC/NAA file      z%illegal field length in IPTC/NAA file   )fpreadlenr   SyntaxErrorIOErrorr   i16)r   stagsizer   r   r   field<   s    (
zIptcImageFile.fieldc       	      C   s  x| j  }|  \}}|r$|dkr&P |r8| j |}nd }|| jkr~t| j| trh| j| | q| j| |g| j|< q|| j|< qW t| jd d }t| jd d }d| jkrt| jd d d }nd}|dkr|sd| _	n6|dkr|rd| | _	n|d	kr |r d
| | _	| 
d| 
df| _yt| 
d }W n tk
rf   tdY nX |dkrd||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   Z_sizeCOMPRESSIONKeyErrorr'   r+   tile)	r   offsetr*   r+   tagdataZlayersZ	componentidZcompressionr   r   r   _openV   s@    




zIptcImageFile._openc             C   s.  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  xV|  \}}	|dkrP x:|	dkr| jt|	d	}
|
sP |
|
 |	t |
8 }	qW qW |  zt|}|  |j| _W d yt| W n tk
r&   Y nX X d S )
Nr   r   r5   F)textr
   zP5
%d %d
255
)r-   r.   i    )r%   r=   r   loadr#   seektempfileZmkstemposfdopenwriter+   r,   r$   mincloser   openimunlinkOSError)r   typer=   Zboxencodingr>   Zo_fdZoutfileor+   r)   Z_imr   r   r   rC      s8     



zIptcImageFile.loadN)	__name__
__module____qualname__formatZformat_descriptionr   r,   rA   rC   r   r   r   r   r   4   s   0r   z.iimc          	   C   s  ddl m}m} ddl}d}t| tr,| jS t| |jr*y| jd }|dd dkr
|dd }d}x|||d  d	kr|d7 }t	||}|d
7 }t
|| }d| | }|d@ r|d7 }t||}	|d7 }|dkr||||	  }P ||	 }|d@ rj|d7 }qjW W n ttfk
r&   Y nX n<t| |jrfy| jj|j }W n ttfk
rd   Y nX |dkrtdS G dd dt}
|
 } t| _i | _||| _y|   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   )TiffImagePluginJpegImagePluginr   NZAPP13   s   Photoshop 3.0 r   s   8BIMr   i  c               @   s   e Zd ZdS )zgetiptcinfo.<locals>.FakeImageN)rR   rS   rT   r   r   r   r   	FakeImage   s   rY   ) rV   rW   ior7   r   r   ZJpegImageFileappr(   r   r   AttributeErrorr<   ZTiffImageFiler*   r?   ZIPTC_NAA_CHUNKobject	__class__BytesIOr#   rA   
IndexError)rL   rV   rW   r[   datar\   r>   codeZname_lenr+   rY   r   r   r   getiptcinfo   s\    




rd   )Z
__future__r   rZ   r   r   Z_binaryr   r   r(   r   r   r	   rF   rE   __version__r;   r   r   r   r   Zregister_openrU   Zregister_extensionrd   r   r   r   r   <module>   s   
{