3
	jQcL                 @   s   d dl mZ ddlmZmZ ddlmZmZ d dl	Z	dZ
dd%d&d'd(d)d*d+d,d-d.d/d0d1iZd d! ZG d"d# d#ejZejejee ejejd$ dS )2    )print_function   )Image	ImageFile)i32lei8Nz0.1i  AL      RGBALA       RGBYCC;P     YCCA;P            c             C   s   | d d t jkS )N   )olefileMAGIC)prefix r$   4/usr/lib/python3/dist-packages/PIL/FpxImagePlugin.py_accept.   s    r&   c               @   s8   e Zd ZdZdZdd ZdddZdd	d
Zdd ZdS )FpxImageFileZFPXZFlashPixc             C   sT   yt j| j| _W n tk
r.   tdY nX | jjjdkrFtd| jd d S )Nz!not an FPX file; invalid OLE filez$56616700-C154-11CE-8553-00AA00A1F95Bznot an FPX file; bad root CLSIDr   )	r!   Z	OleFileIOfpoleIOErrorSyntaxErrorrootZclsid_open_index)selfr$   r$   r%   _open:   s    zFpxImageFile._openr   c       	      C   s  | j jd| dg}|d |d f| _t| j}d}x|dkrP|d }|d7 }q6W |d | _| jd> }|d	|B  }g }t|d
}|d
krtdx,t|D ] }|jt|d|d
  d@  qW t	t
| \| _| _i | _x2tdD ]&}d|d> B }||kr|| | j|< qW | jd| j d S )NzData Object Store %06dzImage Contentsi  i  r   @         i     zInvalid number of bandsr    i   i  )r)   ZgetpropertiessizemaxZmaxidi32r*   rangeappendMODEStuplemoderawmodejpeg_open_subimage)	r.   indexZpropr5   iidsZcolorsZbandsr$   r$   r%   r-   I   s2    




 zFpxImageFile._open_indexr   c          	   C   sB  d| d| dg}| j j|}|jd |jd}t|dt|df}t|dt|d	f}t|d}t|d
}	|| jkrtd|jd|  |jt|d|	 }d }
}|\}}|\}}g | _xntdt	||	D ]X}t||d }|dkr$| jj
d|
||
| || ft||d | jf n|dkrl| jj
d|
||
| || ft||d | j|dd ff n|dkrt|d }t|d }| j}|r|dkrd\}}nd }n|}| jj
d|
||
| || ft||d ||ff |r| j| | _ntd|
| }
|
|krd||  }
}||krP qW || _d | _d S )NzData Object Store %06dzResolution %04dzSubimage 0000 Header   $   r3   r    r2          zsubimage mismatch   r   rawr   Zfillr1         r   YCbCrKCMYKr>   zunknown/invalid compression)rL   rM   )r)   
openstreamreadr7   r5   r*   seekZtiler8   lenr9   r=   r   r>   Ztile_prefixstreamr(   )r.   r@   ZsubimagerR   r(   rC   r5   ZtilesizeoffsetZlengthxyZxsizeZysizeZxtileZytilerA   ZcompressionZinternal_color_conversionZjpeg_tablesr=   Zjpegmoder$   r$   r%   r?   |   s^    






$


zFpxImageFile._open_subimagec             C   s0   | j s$| jj| jd d dg | _ tjj| S )Nr1   zSubimage 0000 Data)r(   r)   rN   rR   r   load)r.   r$   r$   r%   rV      s    zFpxImageFile.loadN)r   )r   r   )	__name__
__module____qualname__formatZformat_descriptionr/   r-   r?   rV   r$   r$   r$   r%   r'   5   s   
3
^r'   z.fpx)r   r	   )r
   )r	   r	   )r   r   )r   r   )r   r   r   )r   r   )r   r   r   r   )r   r   )r   r   r   )r   r   )r   r   r   r   )r   r   )Z
__future__r    r   r   Z_binaryr   r7   r   r!   __version__r:   r&   r'   Zregister_openrZ   Zregister_extensionr$   r$   r$   r%   <module>   s     2