U
    &^                     @   s   d dl Z d dlZddlmZmZ ddlmZmZm	Z
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-install-a1j0c_p1/Pillow/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   getint4   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OSErrorr   i16)r   stagsizer   r   r   field7   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rt| jd d d }nd}|dkr|sd| _	n2|dkr|rd| | _	n|d	kr|rd
| | _	| 
d| 
df| _zt| 
d }W n tk
r^   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   _sizeCOMPRESSIONKeyErrorr&   r*   tile)	r   offsetr)   r*   tagdataZlayers	componentidcompressionr   r   r   _openQ   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  |  \}}	|dkrq|	dkr| jt|	d	}
|
sq|
|
 |	t |
8 }	qq|  zt|}|  |j| _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   rF      s6     


zIptcImageFile.loadN)	__name__
__module____qualname__formatformat_descriptionr   r+   rD   rF   r   r   r   r   r   /   s   1r   z.iimc              	   C   s   ddl m}m} ddl}d}t| tr,| jS t| |jrT| jd}|r|d}n8t| |j	rz| j
j|j }W n ttfk
r   Y nX |dkrd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   )TiffImagePluginJpegImagePluginr   N	photoshopi  c                   @   s   e Zd ZdS )zgetiptcinfo.<locals>.FakeImageN)rV   rW   rX   r   r   r   r   	FakeImage   s   r^   ) r[   r\   ior7   r   r   ZJpegImageFilegetZTiffImageFiler)   r@   ZIPTC_NAA_CHUNKAttributeErrorr=   	__class__BytesIOr"   rD   
IndexError)rQ   r[   r\   r`   datar]   r^   r   r   r   getiptcinfo   s4    
rg   )rJ   rH   r_   r   r   _binaryr   r   r'   r   r   r   r<   r   r   r   r   Zregister_openrY   Zregister_extensionrg   r   r   r   r   <module>   s   
|