U
    Å½„b  ã                   @   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   ú6/tmp/pip-unpacked-wheel-_wxctax1/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   zt  | j¡| _W n, tk
r> } ztdƒ|‚W 5 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}|dkrR|d }|d7 }q8|d | _| jd	> }|d
|B  }g }t|dƒ}|dkr�tdƒ‚t|ƒD ] }| 	t|d|d  ƒd@ ¡ q˜t
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Úi32r   Ú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|d›�dg}| j  |¡}| d¡ | d¡}t|dƒt|d	ƒf}t|d
ƒt|dƒf}t|dƒ}t|dƒ}	|| jkrˆtdƒ‚| d| ¡ | t|dƒ|	 ¡}d }
}|\}}|\}}g | _tdt	|ƒ|	ƒD �]T}t||d	 ƒ}|dk�r(| j 
d|
||
| || ft||ƒd | jf¡ nÚ|dk�rp| j 
d|
||
| || ft||ƒd | j|dd
… ff¡ n’|dk�rú|d }|d }| j}|�r°|dk�rªd\}}nd }n|}| j 
d|
||
| || ft||ƒd ||ff¡ |�r| j| | _ntdƒ‚|
| }
|
|krØd||  }
}||krØ �q0qØ|| _d | _d S )Nr   r   zResolution Z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,   Ztile_prefixÚstreamr   )r   r.   ZsubimagerA   r   r2   r$   ZtilesizeÚoffsetÚlengthÚxÚyZxsizeZysizeZxtileZytiler0   Ú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=   rA   r   Úload)r   r   r   r   rG   ä   s    zFpxImageFile.loadN)r   )r   r   )	Ú__name__Ú
__module__Ú__qualname__ÚformatÚformat_descriptionr   r   r-   rG   r   r   r   r   r   2   s   
0
nr   z.fpx)r   Ú r   r   Ú_binaryr   r%   r(   r   r   Zregister_openrK   Zregister_extensionr   r   r   r   Ú<module>   s   õ ?