
 X                 @   s   d  Z  d d l m Z m Z m Z m Z i	 d d 6d d 6d d 6d  d! 6d" d# 6d$ d% 6d& d' 6d( d) 6d* d+ 6Z e j Z e j Z	 e j
 Z d d   Z Gd d   d e j  Z d d   Z d d   Z e j e j e e  e j e j d  d S),z0.4    )Image	ImageFileImagePalette_binary1   L   P   RGB   CMYK      LAB	   c             C   s   |  d  d  d k S)Nr   s   8BPS )prefixr   r   O/home/ubuntu/projects/ifolica/lib/python3.4/site-packages/PIL/PsdImagePlugin.py_accept/   s    r   c               @   sp   e  Z d  Z d Z d Z d d   Z e d d    Z e d d    Z d	 d
   Z	 d d   Z
 d d   Z d S)PsdImageFileZPSDzAdobe Photoshopc             C   s  |  j  j } | d  } | d  d  d k sJ t | d d    d k rY t d   n  t | d d    } t | d d    } t | d d    } t | | f \ } } | | k r t d	   n  | |  _ t | d
 d    t | d d    f |  _ t | d   } | r[| |  }	 | d k r[| d k r[t	 j
 d |	  |  _ q[n  g  |  _ t | d   } | rk|  j  j   | }
 x |  j  j   |
 k  rg| d  } t | d   } | t | d    } t |  d @s| d  n  | t | d    }	 t |	  d @r/| d  n  |  j j | | |	 f  | d k r|	 |  j d <qqWn  g  |  _ t | d   } | r|  j  j   | }
 t | d   } | rt |  j   |  _ n  |  j  j |
  n  t |  j  | d |  j |  |  _ |  j  |  _ d |  _ d  S)N   r   s   8BPSr   znot a PSD file         znot enough channels      r
   i   zRGB;Lr   i  Zicc_profiler   )r   r   )fpreadi16SyntaxErrorMODESIOErrormodei32sizer   rawZpaletteZ	resourcestelli8lenappendinfolayers
_layerinfoseek	_maketiletile_fpframe)selfr   sZpsd_bitsZpsd_channelsZpsd_moder$   channelsr&   dataendZ	signatureidnamer   r   r   _open;   sX    2	/		"zPsdImageFile._openc             C   s   t  |  j  S)N)r*   r-   )r4   r   r   r   n_frames   s    zPsdImageFile.n_framesc             C   s   t  |  j  d k S)Nr   )r*   r-   )r4   r   r   r   is_animated   s    zPsdImageFile.is_animatedc             C   s   | |  j  k r d  Syg | d k r+ t  n  |  j | d \ } } } } | |  _ | |  _ | |  _  |  j |  _ | | f SWn t k
 r t d   Yn Xd  S)Nr   r   zno such layer)r3   
IndexErrorr-   r$   r1   r2   r   EOFError)r4   layerr:   r$   bboxr1   r   r   r   r/      s    				zPsdImageFile.seekc             C   s   |  j  S)N)r3   )r4   r   r   r   r(      s    zPsdImageFile.tellc             C   s~   |  j  s4 |  j  j |  j k s4 |  j  j |  j k rX t j j |  j |  j d  |  _  n  |  j d k rz t j j |   n  d  S)Nr   r
   )Zimr$   r&   r   corefillload)r4   r   r   r   load_prepare   s
    
*$zPsdImageFile.load_prepareN)__name__
__module____qualname__formatZformat_descriptionr;   propertyr<   r=   r/   r(   rE   r   r   r   r   r   6   s   Lr   c             C   s  g  } |  j  } xt t t | d     D]} t | d   } t | d   } t | d   } t | d   } g  } g  }	 t t t | d     }
 t |
  d k r q. n  xq |
 D]i } t | d   } | d k r d } n
 d | } |	 j |  t | d   } | j | | f  q W|	 j   |	 d g k rTd }	 nE |	 d d	 d g k rrd
 }	 n' |	 d d d	 d g k rd }	 n d  }	 | d  } d } t | d   } d } | rt | d   } | rHt | d   } t | d   } t | d   | } t | d   | } |  j	 | d d  n  | | d 7} t | d   } | r|  j	 | d  n  | | d 7} t
 | d   } | r| |  j d d  } n  | | d 7} n  |  j	 | | d  | j | |	 | | | | f f  q. Wd } xy | D]q \ } }	 } g  } x9 |	 D]1 } t |  | | d  } | r6| j |  q6q6W| |	 | | f | | <| d 7} qW| S)Nr   r   i  AZRGBARr   BGr   r    r      r   zlatin-1replace)r   rangeabsr    r%   listr*   r+   sortr/   r)   decoder0   extend)filer-   r   iZy0Zx0y1Zx1r,   r$   typestypemr&   Zfillerr:   ZcombinedlengthZmask_yZmask_xZmask_hZmask_wrA   r1   tr   r   r   r.      sz    	%	

			&r.   c             C   s  d  } |  j  } t | d   } | d | d } | d | d } |  j   }	 | d k r g  } x.t |  D]P }
 | |
 } | d k r | d 7} n  | j d | |	 | f  |	 | | }	 qp Wn | d k rd } g  } | | | d  } |  j   }	 x t |  D] }
 | |
 } | d k r5| d 7} n  | j d | |	 | f  x< t |  D]. } |	 t | | | d   }	 | d 7} q[WqWn  |  j |	  |	 d @r| d  n  | S)	Nr   r   r   r   r   z;Ir'   Zpackbits)r   r    r(   rR   r+   r/   )rX   r$   rA   r6   r1   r   compressionZxsizeZysizeoffsetZchannelr@   rY   Z	bytecountyr   r   r   r0     s@    	


r0   z.psdN)r   r   )r   r   )r   r   )r   r	   )r   r   )r   r	   )r
   r   )r   r	   )zRGBr   )r   r	   )zCMYKr   )r   r	   )r   r   )r   r	   )r   r   )r	   r	   )r   r   )r   r	   )__version__ZPILr   r   r   r   r"   r)   Zi16ber    Zi32ber%   r   r   r.   r0   Zregister_openrI   Zregister_extensionr   r   r   r   <module>   s(   "
			wV3