U
    &^                     @   sx   d dl Z ddlmZmZ ddlmZmZ ddddd	d
ddZdd Z	G dd dejZ
ee
je
e	 ee
jd dS )    N   )Image	ImageFile)i8i32le)AL)r   r   )RGBAZLA)RGBzYCC;P)r	   zYCCA;P)r
   r
   )r	   r	   )i  )i   )i  i )i   i  i  )i  i i i )i   i  i  )i  i i i c                 C   s   | d d t jkS )N   )olefileMAGIC)prefix r   6/tmp/pip-install-a1j0c_p1/Pillow/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   zt | j| _W n tk
r.   tdY nX | jjjdkrFtd| 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OSErrorSyntaxErrorrootZclsid_open_indexselfr   r   r   _open7   s    zFpxImageFile._openr   c           	      C   s  | j d| dg}|d |d f| _t| j}d}|dkrN|d }|d7 }q4|d | _| jd> }|d	|B  }g }t|d
}|d
krtdt|D ] }|	t|d|d
  d@  qt
t| \| _| _i | _tdD ]&}d|d> B }||kr|| | j|< q| d| j d S )NData Object Store %06dzImage Contentsi  i  r   @         i     zInvalid number of bandsr   i   i  )r   Zgetproperties_sizemaxsizeZmaxidi32IOErrorrangeappendMODEStuplemoderawmodejpeg_open_subimage)	r   indexpropr$   iidscolorsZbandsr   r   r   r   F   s2    





zFpxImageFile._open_indexr   c              
   C   s@  d| d| dg}| j |}|d |d}t|dt|df}t|dt|d	f}t|d}t|d
}	|| jkrtd|d|  |t|d|	 }d }
}|\}}|\}}g | _tdt	||	D ]\}t||d }|dkr | j
d|
||
| || ft||d | jf n|dkrh| 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
d|
||
| || ft||d ||ff |r| j| | _ntd|
| }
|
|krd||  }
}||kr q0q|| _d | _d S )Nr   zResolution %04dzSubimage 0000 Header   $   r    r   r          zsubimage mismatch   r   rawr   fillr         r	   )ZYCbCrKZCMYKr-   zunknown/invalid compression)r   
openstreamreadr%   r$   r   seekZtiler'   lenr(   r,   r   r-   Ztile_prefixstreamr   )r   r/   ZsubimagerB   r   r3   r$   ZtilesizeoffsetlengthxyZxsizeZysizeZxtileZytiler1   compressionZinternal_color_conversionZjpeg_tablesr,   Zjpegmoder   r   r   r.   v   s~    





	
	


zFpxImageFile._open_subimagec                 C   s0   | j s$| j| jd d dg | _ tj| S )Nr   zSubimage 0000 Data)r   r   r>   rB   r   loadr   r   r   r   rH      s    zFpxImageFile.loadN)r   )r   r   )	__name__
__module____qualname__formatformat_descriptionr   r   r.   rH   r   r   r   r   r   2   s   
0
nr   z.fpx)r    r   r   _binaryr   r   r%   r)   r   r   Zregister_openrL   Zregister_extensionr   r   r   r   <module>   s    ?