B
    zb)                 @   st   d dl Z ddlmZmZ ddl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)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   1lib/python3.7/site-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   sd   yt | j| _W n, tk
r> } ztd|W d d }~X Y nX | jjjdkrVt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)selfer   r   r   _open7   s    zFpxImageFile._openr   c       	      C   s"  | j d|ddg}|d |d f| _t| j}d}x|dkrT|d }|d7 }q:W |d | _| jd	> }|d
|B  }g }t|d}|dkrtdx,t|D ] }|	t|d|d  d@  qW t
t| \| _| _i | _x2tdD ]&}d|d	> B }||kr|| | j|< qW | d| j d S )NzData Object Store 06dzImage Contentsi  i  r   @         i     zInvalid number of bandsr
   i   i  )r   ZgetpropertiesZ_sizemaxsizeZmaxidi32r   rangeappendMODEStuplemoderawmodejpeg_open_subimage)	r   indexZpropr"   iidsZcolorsZbandsr   r   r   r   F   s0    




 zFpxImageFile._open_indexr   c          
   C   sH  d|d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 | _xltdt	||	D ]V}t
||
| }t
||| }t||d	 }|dkrB| jd|
|||ft||d | jff n|dkr| jd|
|||ft||d | j|dd
 ff n|dkr|d }|d }| j}|r|dkrd\}}nd }n|}| jd|
|||ft||d ||ff |r| j| | _ntd|
| }
|
|krd||  }
}||krP qW || _d | _d S )NzData Object Store r   zResolution Z04dzSubimage 0000 Header   $   r   r
   r          zsubimage mismatch   r   rawr   Zfillr         r   )ZYCbCrKZCMYKr*   zunknown/invalid compression)r   
openstreamreadr#   r"   r   seekZtiler$   lenminr%   r)   r*   Ztile_prefixstreamr   )r   r,   Zsubimager=   r   r/   r"   ZtilesizeoffsetlengthxyZxsizeZysizeZxtileZytiler-   Zx1Zy1ZcompressionZinternal_color_conversionZjpeg_tablesr)   Zjpegmoder   r   r   r+   v   st    














zFpxImageFile._open_subimagec             C   s0   | j s$| j| jd d dg | _ tj| S )Nr   zSubimage 0000 Data)r   r   r8   r=   r   load)r   r   r   r   rB      s    zFpxImageFile.loadN)r   )r   r   )	__name__
__module____qualname__formatZformat_descriptionr   r   r+   rB   r   r   r   r   r   2   s   
0
qr   z.fpx)r    r   r   Z_binaryr   r#   r&   r   r   Zregister_openrF   Zregister_extensionr   r   r   r   <module>   s    B