U
    <®/e2  ã                   @   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-esgj5yuu/PIL/FpxImagePlugin.pyÚ_accept*   s    r   c                       sT   e Zd ZdZdZdd„ Zddd„Zdd	d
„Zdd„ Z‡ fdd„Z	‡ fdd„Z
‡  ZS )ÚFpxImageFileZFPXZFlashPixc              
   C   sl   zt  | j¡| _W n0 tk
rB } zd}t|ƒ|‚W 5 d }~X Y nX | jjjdkr^d}t|ƒ‚|  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ÚeÚmsgr   r   r   Ú_open6   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”d}	t|	ƒ‚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   r   G   s4    ÿ




zFpxImageFile._open_indexr   c              
   C   sN  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Œd}
t|
ƒ‚| d| ¡ | t|dƒ|	 ¡}d }}|\}}|\}}g | _tdt	|ƒ|	ƒD ]^}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r¼d\}}nd }n|}| j d||||ft||ƒd ||ff¡ |r| j| | _nd}
t|
ƒ‚|| }||krÜd||  }}||krÜ q>qÜ|| _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'   ÚlenÚminr(   r,   r-   Ztile_prefixÚstreamr   )r   r/   ZsubimagerC   r   r3   r%   ZtilesizeÚoffsetÚlengthr   ÚxÚyZxsizeZysizeZxtileZytiler1   Úx1Úy1ÚcompressionZinternal_color_conversionZjpeg_tablesr,   Zjpegmoder   r   r   r.   x   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>   rC   r   Úload©r   r   r   r   rK   è   s    zFpxImageFile.loadc                    s   | j  ¡  tƒ  ¡  d S ©N)r   ÚcloseÚsuperrL   ©Ú	__class__r   r   rN   î   s    
zFpxImageFile.closec                    s   | j  ¡  tƒ  ¡  d S rM   )r   rN   rO   Ú__exit__)r   ÚargsrP   r   r   rR   ò   s    
zFpxImageFile.__exit__)r   )r   r   )Ú__name__Ú
__module__Ú__qualname__ÚformatÚformat_descriptionr   r   r.   rK   rN   rR   Ú__classcell__r   r   rP   r   r   2   s   
1
pr   z.fpx)r   Ú r   r   Ú_binaryr   r&   r)   r   r   Zregister_openrW   Zregister_extensionr   r   r   r   Ú<module>   s   õ J