
 X                 @   s   d  d l  m Z d  d l m Z m Z m Z d  d l Z d  d l Z d Z e j	 Z	 e j
 Z e j Z e j Z i d d 6d d 6Z e d   d	 Z d
 d   Z d d   Z Gd d   d e j  Z e j e j e  e j e j d  d d   Z d S)    )print_function)Image	ImageFile_binaryNz0.3raw   jpeg      c             C   s   t  t |  d d    S)Nr
   )i32PAD)c r   P/home/ubuntu/projects/ifolica/lib/python3.4/site-packages/PIL/IptcImagePlugin.pyi*   s    r   c             C   s6   x( |  D]  } t  d t |  d d q Wt    d  S)Nz%02xend )printi8)r   r   r   r   r   dump.   s    r   c               @   sL   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   getint=   s    zIptcImageFile.getintc             C   s  |  j  j d  } t |  s" d St | d  t | d  f } t | d  d k sx | d d k  sx | d d k r t d   n  t | d  } | d	 k r t d
   nV | d k r d } nA | d k r t |  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     6	zIptcImageFile.fieldc       	      C   s7  x |  j  j   } |  j   \ } } | s7 | d k r; Pn  | rV |  j  j |  } n d  } | t |  j j    k r t |  j | t  r |  j | j |  q |  j | | g |  j | <q | |  j | <q Wt	 |  j d d  } t	 |  j d d  } d |  j k r-t	 |  j d d  d } n d } | d k rR| rRd |  _
 nD | d k rt| rtd	 | |  _
 n" | d
 k r| rd | |  _
 n  |  j d  |  j d  f |  _ y t |  j d  } Wn t k
 rt d   Yn X| d k r3d | | f d d |  j d |  j d f f g |  _ n  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   r/   )r   r/   )r   r1   )r   r2   )r   r3   )r,   r-   )r"   tellr+   r#   listr   keys
isinstanceappendr   moder   r*   COMPRESSIONKeyErrorr&   tile)	r   offsetr)   r*   tagdataZlayersZ	componentidcompressionr   r   r   _openZ   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  n  x{ |  j   \ } }	 | d k r Pn  xR |	 d k r1|  j j t |	 d
   }
 |
 sPn  | j
 |
  |	 t  |
  8}	 q Wq W| j   z) t j |  } | j   | j |  _ Wd  y t j |  Wn t k
 rYn XXd  S)Nr   r   r4   textFr   zP5
%d %d
255
r,   r-   i    )r,   r-   )r$   r=   r   loadr"   seektempfilemkstemposfdopenwriter*   r+   r#   mincloser   openimunlinkOSError)r   typer=   Zboxencodingr>   Zo_fdoutfileor*   r(   Z_imr   r   r   rD      s8    ,

zIptcImageFile.loadN)	__name__
__module____qualname__formatZformat_descriptionr   r+   rB   rD   r   r   r   r   r   8   s   2r   z.iimc             C   sO  d d l  m } m } d d l } d } t |  t  r> |  j St |  | j  ry|  j d } | d d  d k rf| d d  } d } x | | | d  d k rb| d 7} t	 | |  } | d	 7} t
 | |  } d
 | | } | d
 @r| d
 7} n  t | |  }	 | d 7} | d k r>| | | |	  } Pn  | |	 } | d
 @r | d
 7} q q Wn  Wqt t f k
 rYqXnG t |  | j  ry |  j j | j } Wqt t f k
 rYqXn  | d k rd SGd d   d t  }
 |
   }  t |  _ i  |  _ | j |  |  _ y |  j   Wn t t f k
 rGYn 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JpegImagePluginNZAPP13   s   Photoshop 3.0 r
   s   8BIMr   r   i  c               @   s   e  Z d  Z d S)zgetiptcinfo.<locals>.FakeImageN)rU   rV   rW   r   r   r   r   	FakeImage   s   r\   )PILrY   rZ   ior8   r   r   ZJpegImageFileappr'   r   r   AttributeErrorr<   ZTiffImageFiler)   r?   ZIPTC_NAA_CHUNKobject	__class__BytesIOr"   rB   
IndexError)rN   rY   rZ   r^   datar_   r>   codeZname_lenr*   r\   r   r   r   getiptcinfo   s\    





			rg   )
__future__r   r]   r   r   r   rH   rF   __version__r   Zi16ber'   Zi32ber   Zo8r;   r   r   r   r   Zregister_openrX   Zregister_extensionrg   r   r   r   r   <module>   s$   				

}