o
    f                     @  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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   )RGBA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 prefixbytesreturnboolc                 C  s   | d d t jkS )N   )olefileMAGIC)r    r   K/home/ubuntu/webapp/venv/lib/python3.10/site-packages/PIL/FpxImagePlugin.py_accept,   s   r   c                      s\   e Zd ZdZdZdd Zddd
dZddddZdd Zd fddZ	d fddZ
  ZS )FpxImageFileFPXFlashPixc              
   C  sb   z	t | j| _W n ty } zd}t||d }~ww | 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   	OleFileIOfpoleOSErrorSyntaxErrorrootclsid_open_index)selfemsgr   r   r   _open8   s   
zFpxImageFile._openr   indexintr   Nonec           	        s  | j d|ddg}|d |d f| _t| j}d}|dkr,|d }|d7 }|dks |d | _| jd	> }|d
|B   t d}|dkrKd}t|t fddt	|D }t
| \| _| _i | _t	dD ]}d|d	> B }||v rz|| | j|< qg| 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>l   s   $ z+FpxImageFile._open_index.<locals>.<genexpr>   i  )r   getproperties_sizemaxsizemaxidr.   r   tuplerangeMODES_moderawmodejpeg_open_subimage)	r!   r%   propr8   r0   idbandsr#   colorsr   r1   r   r    I   s4   



zFpxImageFile._open_indexr   subimagec              
   C  sJ  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rFd}
t|
|d|  |t|d|	 }d }}|\}}|\}}g | _tdt	||	D ]}t
||| }t
||| }t||d	 }|dkr| jd||||ft||d | jff nb|dkr| jd||||ft||d | j|dd
 ff nC|dkr|d }|d }| j}|r|dkrd\}}nd }n|}| jd||||ft||d ||ff |r| j| | _nd}
t|
|| }||krd|| }}||kr nqn|| _| j| _d | _d S )Nr(   r)   zResolution 04dzSubimage 0000 Header   $   r-   r   r,          zsubimage mismatch   r   rawr   fillr+         r	   )YCbCrKCMYKr?   zunknown/invalid compression)r   
openstreamreadr.   r8   r   seektiler;   lenminappendr>   r?   tile_prefixstreamr   _fp)r!   r%   rE   rZ   r   r2   r8   tilesizeoffsetlengthr#   xyxsizeysizextileytiler0   x1y1compressioninternal_color_conversionjpeg_tablesr>   jpegmoder   r   r   r@   y   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   rR   rZ   r   loadr!   r   r   r   rk      s   zFpxImageFile.loadc                   s   | j   t   d S N)r   closesuperrl   	__class__r   r   rn         
zFpxImageFile.closeargsobjectc                   s   | j   t   d S rm   )r   rn   ro   __exit__)r!   rs   rp   r   r   ru      rr   zFpxImageFile.__exit__)r   )r%   r&   r   r'   )r   r   )r%   r&   rE   r&   r   r'   )r   r'   )rs   rt   r   r'   )__name__
__module____qualname__formatformat_descriptionr$   r    r@   rk   rn   ru   __classcell__r   r   rp   r   r   4   s    0qr   z.fpx)r   r   r   r   )
__future__r   r    r   r   _binaryr   r.   r<   r   r   register_openry   register_extensionr   r   r   r   <module>   s"   
 J