o
    6>gC                     @  s   d dl mZ d dlZddlmZmZmZ ddlmZ	 ddlm
Z ddlmZ dddZG dd dejZeejee eejddg dS )    )annotationsN   )Image	ImageFileImagePalette)i16le)i32leo8prefixbytesreturnboolc                 C  s(   t | dkot| ddv ot| ddv S )N      )  i     )r      )leni16)r    r   E/var/www/html/venv/lib/python3.10/site-packages/PIL/FliImagePlugin.py_accept   s
   r   c                   @  sJ   e Zd ZdZdZdZdddZdddZdddZdddZ	dddZ
dS )FliImageFileFLIzAutodesk FLI/FLC AnimationFr   Nonec           
      C  s  | j d}t|r|dd dksd}t|t|d| _| jdk| _d| _t|d	t|d
f| _t	|d}t|d}|dkrF|d d }|| j
d< dd tdD }| j d}d| _t|ddkry| jt	| | _| j | j | j d}t|ddkrt|d}d }t|D ]5}|d ur| j |d tj | j d}t|d}	|	dv r| ||	dkrdnd  n	t	|}|s nqtdddd |D | _d| _| j | _| j  | _| d d S )N         s     znot an FLI/FLC filer   r   P   
      r   r   i  F   durationc                 S  s   g | ]}|||fqS r   r   ).0ar   r   r   
<listcomp>G   s    z&FliImageFile._open.<locals>.<listcomp>   i   i  )r      r)      r   RGB    c                 s  s.    | ]\}}}t |t | t | V  qd S Nr	   )r%   rgbr   r   r   	<genexpr>d   s   , z%FliImageFile._open.<locals>.<genexpr>)fpreadr   SyntaxErrorr   n_framesis_animated_mode_sizei32inforange_FliImageFile__offsetseekosSEEK_CUR_paletter   rawjoinpalette_FliImageFile__frame_fptell_FliImageFile__rewind)
selfsmsgr$   magicrD   number_of_subchunks
chunk_size_
chunk_typer   r   r   _open0   sT   




zFliImageFile._openrD   list[tuple[int, int, int]]shiftintc           
      C  s   d}t t| jdD ]L}| jd}||d  }|d }|dkr$d}| j|d }t dt|dD ]#}|| |> }||d  |> }||d  |> }	|||	f||< |d7 }q4qd S )Nr   r*   r   r(   r   )r<   r   r3   r4   r   )
rI   rD   rS   ierJ   nr.   r/   r0   r   r   r   rA   m   s    
zFliImageFile._paletteframec                 C  sJ   |  |sd S || jk r| d t| jd |d D ]}| | qd S )Nr   r   )_seek_checkrE   _seekr<   )rI   rX   fr   r   r   r>      s   


zFliImageFile.seekc                 C  s   |dkrd| _ | j| j d| _n|   || j d kr&d| }t||| _ | j| _| j| j | jd}|sBd}t	|t
|}|| _tdd	| j | jg| _|  j|7  _d S )
Nr   r2   r   r   zcannot seek to frame r   zmissing frame sizefli)r   r   )rE   rF   r>   rH   r=   load
ValueErrorr3   r4   EOFErrorr:   decodermaxblockr   _Tilesizetile)rI   rX   rK   rJ   	framesizer   r   r   rZ      s&   
zFliImageFile._seekc                 C  s   | j S r-   )rE   )rI   r   r   r   rG      s   zFliImageFile.tellN)r   r   )rD   rR   rS   rT   r   r   )rX   rT   r   r   )r   rT   )__name__
__module____qualname__formatformat_description!_close_exclusive_fp_after_loadingrQ   rA   r>   rZ   rG   r   r   r   r   r   +   s    

=

	r   z.fliz.flc)r   r   r   r   )
__future__r   r?    r   r   r   _binaryr   r   r   r:   r
   r   r   register_openrh   register_extensionsr   r   r   r   <module>   s   
 