3
`JZ                 @   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jeje ej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 )Nr   )i32PAD)c r   5/usr/lib/python3/dist-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 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 j|d }nt|dd  }||fS )Nr   r   r         	   zinvalid IPTC/NAA file      z%illegal field length in IPTC/NAA file   )Nr   )fpreadlenr   SyntaxErrorIOErrorr   i16)r   stagsizer   r   r   field<   s    (
zIptcImageFile.fieldc       	      C   s  x| j j }| j \}}| s&|dkr(P |r:| j j|}nd }|| jkrt| j| trj| j| 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o|  rd| _	n6|dkr|rd	| | _	n|d
kr&|r&d| | _	| j
d| j
df| _yt| j
d }W n tk
rl   tdY nX |dkrd||fdd| jd | jd ffg| _d S )N   
   r    <   r   r   A   LZRGBr   ZCMYK      x   zUnknown IPTC image compressioniptc)r-   r.   )r    r/   )r    r/   )r    r0   )r    r0   )r    r2   )r    r3   )r    r4   )r-   r.   )r#   tellr,   r$   r   
isinstancelistappendr   moder   r+   COMPRESSIONKeyErrorr'   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j| S | jd \}}}|\}}| jj| tjdd\}}tj	|}|dkr|j
d| j  xV| j \}}	|dkrP x:|	dkr| jjt|	d
}
|
sP |j
|
 |	t |
8 }	qW qW |j  ztj|}|j  |j| _W d ytj| 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%   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   2r   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 | _|j|| _y| j  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   
}