a
    Agx                     @  s   d dl mZ 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dddZ
G dd dejZeejee
 eejd dS )    )annotationsN   )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 bytesbool)prefixreturnc                 C  s   | d d t jkS )N   )olefileMAGIC)r    r   Q/var/www/lab.imftr.de/x/nb_venv/lib/python3.9/site-packages/PIL/FpxImagePlugin.py_accept,   s    r   c                      s   e Zd ZdZdZddddZdddd	d
dZdddddddZddddZdd fddZ	ddd fddZ
  ZS )FpxImageFileZFPXZFlashPixNone)r   c              
   C  sv   zt | j| _W n2 tyD } zd}t||W Y d }~n
d }~0 0 | jj}|r\|jdkrhd}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   r   _open8   s     zFpxImageFile._openr   int)indexr   c           	        s0  | j d|ddg}t|d ts*J t|d ts<J |d |d f| _t| j}d}|dkrv|d }|d7 }q\|d | _| jd	> }|d
|B   t trt	 d }dkrd}t
|t fddt|D }t| \| _| _i | _tdD ]&}d|d	> B }||v r|| | j|< q| d| j d S )NData Object Store 06dzImage Contentsi  i  r   @         i     zInvalid number of bandsc                 3  s$   | ]}t  d |d  d@ V  qdS )r   r(   iN)i32).0isr   r   	<genexpr>n       z+FpxImageFile._open_index.<locals>.<genexpr>   i  )r   Zgetproperties
isinstancer!   _sizemaxsizeZmaxidr   r)   r   tuplerangeMODES_moderawmodejpeg_open_subimage)	r   r"   propr4   r+   idZbandsr   colorsr   r,   r   r   J   s2    



zFpxImageFile._open_indexr   )r"   subimager   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rd}
t|
|d|  |t|d|	 }d }}|\}}|\}}g | _tdt	||	D ]h}t
||| }t
||| }t||d	 }|dkrD| jtd||||ft||d | j n|dkr| jtd||||ft||d | j|dd
 f n|dkr|d }|d }| j}|r|dkrd\}}nd }n|}| jtd||||ft||d ||f |r| j| | _nd}
t|
|| }||krd||  }}||kr qHq|| _| j| _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)   r4   r   seekZtiler6   lenminappendr   Z_Tiler9   r:   Ztile_prefixstreamr   _fp)r   r"   r?   rO   r   r-   r4   Ztilesizeoffsetlengthr   xyZxsizeZysizeZxtileZytiler+   x1y1compressionZinternal_color_conversionZjpeg_tablesr9   Zjpegmoder   r   r   r;   {   s    








	

	



zFpxImageFile._open_subimagezImage.core.PixelAccess | Nonec                 C  s0   | j s$| j| jd d dg | _ tj| S )Nr&   zSubimage 0000 Data)r   r   rI   rO   r   loadr   r   r   r   rX      s    zFpxImageFile.loadc                   s   | j   t   d S N)r   closesuperrY   	__class__r   r   r[      s    
zFpxImageFile.closeobject)argsr   c                   s   | j   t   d S rZ   )r   r[   r\   __exit__)r   r`   r]   r   r   ra      s    
zFpxImageFile.__exit__)r   )r   r   )__name__
__module____qualname__formatformat_descriptionr    r   r;   rX   r[   ra   __classcell__r   r   r]   r   r   4   s   1qr   z.fpx)
__future__r   r    r   r   _binaryr   r)   r7   r   r   Zregister_openre   Zregister_extensionr   r   r   r   <module>   s     L