
hR\                 @   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 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)i8i16bei32beo8Nz0.3rawjpeg      c             C   s   t  t |  d d    S)Nr   )i32PAD)c r   H/var/www/dbchiro/venv/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 )printr   )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   getint9   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   s+  x |  j  j   } |  j   \ } } | s7 | d k r; Pn  | rV |  j  j |  } n d  } | |  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 rF| rFd |  _	 nD | d k rh| rh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 r'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!   r0   )r!   r0   )r!   r1   )r!   r1   )r!   r3   )r!   r4   )r!   r5   )r.   r/   )r$   tellr-   r%   r   
isinstancelistappendr   moder   r,   COMPRESSIONKeyErrorr(   tile)	r   offsetr+   r,   tagdataZlayersZ	componentid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  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   r6   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   rE      s8    ,

zIptcImageFile.loadN)	__name__
__module____qualname__formatZformat_descriptionr   r-   rC   rE   r   r   r   r   r   4   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JpegImagePluginr   NZAPP13   s   Photoshop 3.0 r   s   8BIMr   i  c               @   s   e  Z d  Z d S)zgetiptcinfo.<locals>.FakeImageN)rV   rW   rX   r   r   r   r   	FakeImage   s   r]   ) rZ   r[   ior8   r   r   ZJpegImageFileappr)   r   r   AttributeErrorr=   ZTiffImageFiler+   r@   ZIPTC_NAA_CHUNKobject	__class__BytesIOr$   rC   
IndexError)rO   rZ   r[   r_   datar`   r?   codeZname_lenr,   r]   r   r   r   getiptcinfo   s\    





			rh   )
__future__r   r^   r   r   Z_binaryr   r   r)   r   r   r	   rI   rG   __version__r<   r   r   r   r   Zregister_openrY   Zregister_extensionrh   r   r   r   r   <module>   s   "

}