Sindbad~EG File Manager

Current Path : /usr/local/lib/python3.12/site-packages/PIL/__pycache__/
Upload File :
Current File : //usr/local/lib/python3.12/site-packages/PIL/__pycache__/GifImagePlugin.cpython-312.pyc

�

&ٜg�����ddlmZddlZddlZddlZddlZddlmZddlm	Z	ddl
mZmZm
Z
mZmZmZddlmZmZmZmZmZmZmZddlmZdd	lmZdd
lmZerddlmZddl m!Z!Gd
�de�Z"e"jFZ$d-d�Z%Gd�dej(�Z&dddd�Z'd.d�Z(ee)e*e+e,ej.fZ-								d/d�Z.								d0d�Z/						d1d�Z0Gd�de�Z1								d2d�Z2d3d�Z3	d4									d5d�Z4d6d�Z5										d7d �Z6d3d!�Z7dZ8d8d"�Z9d9d#�Z:d:d$�Z;d;d%�Z<						d<d&�Z=d=d'�Z>										d>d(�Z?	d?							d@d)�Z@	dA							dBd*�ZAej�e&j�e&e%�ej�e&j�e4�ej�e&j�e3�ej�e&j�d+�ej�e&j�d,�y)C�)�annotationsN)�IntEnum)�cached_property)�IO�
TYPE_CHECKING�Any�Literal�
NamedTuple�Union�)�Image�
ImageChops�	ImageFile�	ImageMath�ImageOps�ImagePalette�
ImageSequence)�i16le)�o8)�o16le)�_imaging)�Bufferc��eZdZdZdZdZdZy)�LoadingStrategyz.. versionadded:: 9.1.0rr�N)�__name__�
__module__�__qualname__�__doc__�RGB_AFTER_FIRST� RGB_AFTER_DIFFERENT_PALETTE_ONLY�
RGB_ALWAYS���=/usr/local/lib/python3.12/site-packages/PIL/GifImagePlugin.pyrr6s��!��O�'(�$��Jr$rc��|dddvS)N�)sGIF87asGIF89ar#)�prefixs r%�_acceptr)Es���"�1�:�/�/�/r$c���eZdZdZdZdZdZdd�Zdd�Zdd�Z	e
dd��Zedd	��Z
dd
�Zddd�Zd�fd�Zdd
�Zdd�Z�xZS)�GifImageFile�GIFzCompuserve GIFFNc��|jjd�}|r#|dr|jj|d�Sy)Nrr)�fp�read)�self�ss  r%�datazGifImageFile.dataUs6���G�G�L�L��O����1���7�7�<�<��!��%�%�r$c��tdt|�d�D]*}|dz||cxk(r||dzcxk(r
||dzk(r�'yyy)Nr�rrTF)�range�len)r0�p�is   r%�_is_palette_neededzGifImageFile._is_palette_needed[sS���q�#�a�&�!�$�A���F�a��d�:�a��A��h�:�!�A��E�(�:��;��%�r$c�F�|jjd�}t|�s
d}t|��|dd|jd<t|d�t|d�f|_|d}|dzdz}|d	zre|d
|jd<|jjd|z�}|j|�r$tjd
|�}|x|_
|_|j|_|jj�|_d|_|j!d�y)N�
znot a GIF filer'�version��
�r���
backgroundr4�RGBr)r.r/r)�SyntaxError�info�i16�_sizer9r�raw�global_palette�palette�_fp�tell�_GifImageFile__rewind�	_n_frames�_seek)r0r1�msg�flags�bitsr7s      r%�_openzGifImageFile._openas����G�G�L�L�����q�z�"�C��c�"�"� ��!�u��	�	�)����A�Y��A�q�	�)��
��"�����	�Q����3�;�&'��e�D�I�I�l�#������Q�$�Y�'�A��&�&�q�)� �$�$�U�A�.��56�6��#�d�l��7�7����������
�%)����
�
�1�
r$c��|j�6|j�}		|j|j�dzd��$|jS#t$r|j�dz|_YnwxYw|j	|��E)NrF�rNrLrO�EOFError�seek)r0�currents  r%�n_frameszGifImageFile.n_frames{sw���>�>�!��i�i�k�G�
1���J�J�t�y�y�{�Q���6��
�~�~����
1�!%����q����
1���I�I�g��s�%A�!A3�2A3c���|j�|jdk7S|j�}|ry	|jdd�d}|j	|�|S#t$rd}Y� wxYw)NrTFrU)r0rX�is_animateds   r%r[zGifImageFile.is_animated�sn���>�>�%��>�>�Q�&�&��)�)�+����	 ��J�J�q�%� ��K�	
�	�	�'�����	�	 ��K�	 �s�A�A%�$A%c�T�|j|�sy||jkrd|_|jd�|j}t	|jdz|dz�D]}	|j|��y#t
$r$}|j
|�d}t|�|�d}~wwxYw)Nrr�no more images in GIF file)�_seek_check�_GifImageFile__frame�_imrOr5rVrW)r0�frame�
last_frame�f�erPs      r%rWzGifImageFile.seek�s�������&���4�<�<���D�H��J�J�q�M��\�\�
��t�|�|�a�'����3�A�
+��
�
�1�
�4���
+��	�	�*�%�2���s�m��*��
+�s�&A:�:	B'�B"�"B'c�f��|dk(r]d�_d�_d�_�jj	�j
�d�_d�jvr,�jd=n�jr|r�j�|�jdzk7rd|��}t|���j�_�jrN�jj	�j��j�r	�j�r�d�_�jjd�}|r|dk(r
d}t|��d}i}d}d}d}		|s�jjd�}|r|dk(r�n�|dk(�rG�jjd�}�j�}
|dd	k(r7|
�5|
d}|dzr|
d
}t|
d�dz|d<d
|z}|dz	}|r�|�_n�|ddk(r9d}
|
r|
|
z
}
�j�}
|
r�d|vr|dxxd|
zz
cc<n|
|d<d}��|ddk(ro|dk(rj|
�h|
�jj!�f|d<|
dddk(rA�j�}
|
r/t#|
�d
k\r!|
ddk(rt|
d��jd<�j��r�	�j�r��ny|dk(�rs�jjd�}t|d�t|d�}}|t|d�z|t|d�z}}|�j$dkDs|�j$dkDrX|rVt'|�j$d�t'|�j$d�f�_t+j,�j(�||||f}	|d}|dzdk7}|dzrP|dzdz}�jjd
|z�}�j/|�rt1j2d|�}nd }�jjd�d}�jj!��_nd}���|�
d!}t|��|�_|syg�_�jr0�j4j7�j�j8�|�|n�j:�_|�_|dk(r{�j<r+t@tBjDk(r|�d"nd�_#nd#�_#nd$�_#|r	|�_$�n�j:rdd%l%m%}|�j:��_$n�d�_$n�jLd#k(r�t@tBjNk7s|r�d&�jvrw�j4jQ�jd&d��j4jSd"t*jTjV��_d"�_#�jd&=n@d�_#�j4jSdt*jTjV��_d-�fd'�}d�_|	�_�j8�r��jdk\�r�	�jdk(rljj8\}}}}||z
||z
f}t+j,|�d#}�jjYd&|�}|��jLd(vrBd"}||�d)z}n4�jjYd*d�}�jLd(vr
d}||�}t*jZj]|||��_n��j^�,�ja�j4�j8��_nw|�u�j8\}}}}||z
||z
f}t+j,|�d#}|}�jLd(vr
d"}||�d)z}t*jZj]|||��_|�od}|�<|dk(r't@tBjDk7r |�jd&<n�jLd(vr|}tejfd+f�j||f�g�_|jYd�r|d�jd<d,D]5}||vr||�j|<�|�jvs�)�j|=�7y#tb$rY��wxYw).Nr����commentrzcannot seek to frame �;r]�!�r4r>�duration�r�r$�
��	extensionrA�NETSCAPE2.0�loop�,�	�r'r=�@r@r?rCFzimage not found in GIF frame�RGBA�P�L)�copy�transparencyc�����jrU|dzdzt�jj�kDrd}t�jj|dz|dzdz�S|||fS)Nr4r)�_frame_paletter6rJ�tuple)�colorr0s �r%�_rgbz GifImageFile._seek.<locals>._rgbYsj����"�"��1�9�q�=�3�t�':�':�'B�'B�#C�C��E��T�0�0�8�8����U�Q�Y�QR�]�S�T�T��u�e�,�,r$�rCrw)rrB�gif)rkrp)r�int�returnztuple[int, int, int])4�_GifImageFile__offset�disposer_rKrWrM�disposal_methodrE�tile�load�
ValueErrorr.r2r/rVrFrLr6�size�maxrGr
�_decompression_bomb_checkr9rrH�im�paste�dispose_extentrIr}�_frame_transparency�LOADING_STRATEGYrr"�_moderJrz�moder!�putpalettealpha�convert�Dither�FLOYDSTEINBERG�get�core�fillr`�_crop�AttributeErrorr�_Tile)r0ra�update_imagerPr1rJrE�frame_transparency�	interlace�frame_dispose_extent�blockrQ�dispose_bitsrg�x0�y0�x1�y1rRr7rzr��dispose_size�dispose_moderr{�ks`                          r%rOzGifImageFile._seek�s����A�:��D�M�8<�D�L��D�L��H�H�M�M�$�-�-�(�#$�D� ��D�I�I�%��I�I�i�(��y�y�\��	�	���D�L�L�1�$�$�)�%��1�C��S�/�!��(�(����=�=��G�G�L�L����'��)�)�+���)�)�+��D�M��G�G�L�L��O���A��I�.�C��3�-��EI��!��!���	�#�����G�G�L�L��O����T�	���d���G�G�L�L��O���	�	����Q�4�3�;�5�#4�"�!�H�E��q�y�-2�1�X�*�'*�5�!�}�r�'9�D��$�$.��#5�L�#/�1�#4�L�#�
0<��,��q�T�S�[�"�G� ��5�(�� $�	�	��� �!�D�(��Y��5�7�?�:��*1��Y���A���q�T�S�[�U�a�Z�E�4E�).�t�w�w�|�|�~�(=�D��%��S�b�z�^�3� $�	�	��� �S��Z�1�_��q��Q��03�E�1�
�D�I�I�f�-��i�i�k���i�i�k��d���G�G�L�L��O���Q���C��1�I�B���c�!�Q�i���c�!�Q�i��B������1��%��d�i�i��l�):��!$�R����1��!6��B��	�	�!��8M�!M�D�J��3�3�D�J�J�?�')�2�r�2�~�$��!���"�R�Z�A�-�	��3�;�!�A�I��?�D������Q�$�Y�/�A��.�.�q�1�".�"2�"2�5�!�"<��"'���w�w�|�|�A��q�)�� $�������
���A�s�v��0�C��3�-���������	��<�<��G�G�M�M�$�,�,��(;�(;�<�)0�)<�g�$�BU�BU���#5�� ��A�:��"�"�#��'A�'A�A�+=�+I��u�D�J�!$�D�J� ��
��&����$�$�%�#�D�$7�$7�8���#����y�y�C��$��(X�(X�X��%����2����/�/��	�	�.�0I�1�M�"&�'�'�/�/�&�%�,�,�:U�:U�"V���%+��
� �I�I�n�5�%*��
�"&�'�'�/�/�%����9T�9T�"U���	-����2������4�#7�#7�1�#<�*
��'�'�1�,�&*�%8�%8�N�B��B��$&��G�R�"�W�#5�L��3�3�L�A�$'�L� �I�I�M�M�.�:L�M�E��(��9�9��7�+1�L�$(��K�$�$6�E� $�	�	�
�
�l�A� >���9�9��7�+0�L�$(��K�E�#(�:�:�?�?�<��u�#U�D�L��x�x�+�'+�z�z�$�'�'�4�;N�;N�'O���+�7�)-�)<�)<���B��B�(*�R���b��'9���7�7��E�'*�� 2���9�9��7�+1�L�$(�);�$<�t�$C�E�',�z�z���(�,��(���� ��L�!�-��A�:�'�?�+E�+E�E�4F��	�	�.�1��Y�Y�o�5�#5�L�������R��$��M�M��9�l�3�	��D�I��8�8�I��#'�	�?�D�I�I�i� �*�A��D�y�#�A�w��	�	�!���d�i�i���I�I�a�L�	+��-"�
��
�s�Fb$�$	b0�/b0c�8��|jrdnd}d|_|jdk(rG|j��tj
j
||j|j�|_n�|jdvr�|j|_|jrttj
j
d|j|jxsd�|_|jjdg|jj����nd|_|js�|j��|j|jjk7r�tj
j
|jj|j�}|jr+|jdg|jj����|j|jd|jjz�||_||_d|_t�|�A�y)Nrxryrr�rC�rr)r}�_prev_imr_r�r
r�r�r�r�r��
putpalette�getdatar`r�r��super�load_prepare)r0�	temp_mode�expanded_im�	__class__s   �r%r�zGifImageFile.load_prepare�s�����.�.�C�C�	���
��<�<�1���'�'�3��*�*�/�/��t�y�y�$�*B�*B�����Y�Y�/�
)� �G�G�D�M��"�"��*�*�/�/�#�t�y�y�$�:R�:R�:W�VW�X���"����"�"�5�I�4�+>�+>�+F�+F�+H�I�����}�}����!5�$�)�)�t�w�w�|�|�:S��*�*�/�/�$�'�'�,�,��	�	�B�K��"�"�&��&�&�u�M�t�/B�/B�/J�/J�/L�M����d�g�g�v������'<�=�!�D�G���
�"���
���r$c���|jdk(r�|jdk(r�ttjk(r�|j
�.|jj|j
d�d|_nd|_|jj|jtjj�|_y|jsy|j|jjk7r�|j
�+tjj!d|j�}nftjj!d|j�}|j#dd|jj%��|jd�}|j'|jd|jjz�||_
|j�J�|j
�B|jj|j
d�|jjd�}n|jjd�}|j(�J�|j+||j(�}|j|_|jj|_|jdk(r(|jj'||j(|�y|jj'||j(�y)NrrxrwrCr�)r_r�r�rr"r�r�r�r�r�r
r�r�r�r�r�r�r��
getpaletter�r�r�)r0r��frame_ims   r%�load_endzGifImageFile.load_end�s���<�<�1���y�y�C��$4��8R�8R�$R��+�+�7��G�G�+�+�D�,D�,D�a�H�!'�D�J�!&�D�J��'�'�/�/�$�)�)�U�\�\�5P�5P�Q�����}�}���9�9��
�
�*�*�*��'�'�3�#�j�j�o�o�f�d�i�i�@��#�j�j�o�o�c�4�9�9�=���&�&�u�e�T�W�W�5G�5G�5I�J�)�1�1�%�8�����d�m�m�V�d�m�m�6H�6H�-H�I�'�D�M��=�=�,�,�,��#�#�/��G�G�#�#�D�$<�$<�a�@��w�w���v�.�H��w�w���u�-�H��"�"�.�.�.��:�:�h��(;�(;�<���-�-����W�W�\�\��
��=�=�F�"��G�G�M�M�(�D�$7�$7��B��G�G�M�M�(�D�$7�$7�8r$c��|jS�N)r_)r0s r%rLzGifImageFile.tell�s���|�|�r$)r�zbytes | None)r7�bytesr��bool)r��None)r�r�)r�r�)rar�r�r�)T)rar�r�r�r�r�)rrr�format�format_description�!_close_exclusive_fp_after_loadingrIr2r9rS�propertyrYrr[rWrOr�r�rL�
__classcell__)r�s@r%r+r+Nsl���
�F�)��(-�%��N����4�	��	�����"+� ~!�@�6%9�Nr$r+ryrx)�1ryrxc���|jtvr|j�|Stj|j�dk(r�|jdtjj��}|j�J�|jjdk(rL|jjD]3}|ddk(s�|jj||jd<|S|S|jd�S)	a
    Takes an image (or frame), returns an image in a mode that is appropriate
    for saving in a Gif.

    It may return the original image, or it may return an image converted to
    palette or 'L' mode.

    :param im: Image object
    :returns: Image object
    rCrx�rJrwr4rr{ry)r��RAWMODEr�r
�getmodebaser��Palette�ADAPTIVErJ�colorsrE)r��rgbas  r%�_normalize_moder��s���
�w�w�'��
���	��	�������!�U�*�
�Z�Z��U�]�]�%;�%;�Z�
<���z�z�%�%�%�
�:�:�?�?�f�$��
�
�)�)����7�a�<�.0�j�j�.?�.?��.E�B�G�G�N�+���	�	*��	�
�:�:�c�?�r$c�H�d}|rXt|tttf�rt|dd�}t|tj�rt|j
�}|jdk(r#|sZ|jd�}|�J�t|�}n9|std�td�D��}t	jd|��|_|�J�|r�g}|j
�J�tdt|�d�D]O}t|||dz�}|j
jj|�}||vrd}|j|��Qt|�D],\}}|��	tt|��D]
}	|	|vs�|	||<�,�.g}
|D]}|�J�|
j|��|j|
�}n@t!||�}|�2|j||�}d	|vr	|j#|d	�|d	<|S|S|j
�J�||j
_|S#t$$r|d	=Y|SwxYw)
at
    Normalizes the palette for image.
      - Sets the palette to the incoming palette, if provided.
      - Ensures that there's a palette for L mode images
      - Optimizes the palette if necessary/desired.

    :param im: Image object
    :param palette: bytes object containing the source palette, or ....
    :param info: encoderinfo
    :returns: Image object
    Nirxc3�&K�|]	}|dz���y�w)r4Nr#)�.0r8s  r%�	<genexpr>z%_normalize_palette.<locals>.<genexpr>0s����&B�z�!�q�A�v�z�s�rCr�rr4r{)�
isinstancer��	bytearray�listrrJr�r�r5r6r~r�r��append�	enumerate�
remap_palette�
_get_optimize�indexr�)r�rJrE�source_palette�
im_palette�used_palette_colorsr8�source_colorr��j�dest_map�optimized_palette_colorss            r%�_normalize_paletter�sL���N���g��y�$�7�8�&�w�t��}�5�N��g�|�8�8�9�&�w���7�N�	�w�w�#�~�����t�,�J��)�)�)�&�z�2�N��&�&B�u�S�z�&B�B�N�!�.�.�u�n�M��
��%�%�%��02���z�z�%�%�%��q�#�n�-�q�1�A� ���A��E�!:�;�L��J�J�%�%�)�)�,�7�E��+�+����&�&�u�-�2�"�"5�6�H�A�u��}��s�#6�7�8�A�� 3�3�12�+�A�.��9�7�!��(�E��$�$�$��O�O�E�"�)��
�
�h�
'��#0��T�#:� �#�/��!�!�":�N�K�B���%�-�+C�+I�+I��^�,�,�D��(�
�I�2�I�
�:�:�!�!�!�'�B�J�J��
�I��
"�-��^�,��I�-�s�H�H!� H!c�\�t|�}|jj�D]2\}}t|t�s�|j
j
||��4t|||j
�}t||j
�D]}|j|��d}t|�r|dz}t||d|�dt|�f|_tj||tjdd|j zdt"|j$�g�|jd�y)Nrrvr�r=r��)r�rE�itemsr��str�encoderinfo�
setdefaultr��_get_global_header�write�
get_interlace�_write_local_header�
encoderconfigr�_saver�r�r�r�)r�r.rJ�im_outr��vr1rQs        r%�_write_single_framer�Zs���
�R�
 �F����!�!�#���1��a����N�N�%�%�a��+�$� ������
@�F�
�����
7��
�����8�
�E��R����
����B���.��}�R�0�1�F��
�O�O���Y�_�_�U�F�R�W�W�,<�a�����AU�V�W���H�H�U�Or$c�2�||fD�cgc]/}|jrt|jj�nd��1}}|d|dk7r"|jd�}|jd�}tj||�}||jd��fScc}w)Nr$rrrwF)�
alpha_only)rJr�r�r�subtract_modulo�getbbox)�base_im�im_framer��
palette_bytes�deltas     r%�_getbboxr�vs���EL�X�CV��CV�R�R�Z�Z��b�j�j� � �!�S�8�CV����Q��=��+�+��#�#�F�+���/�/�&�)���&�&�x��9�E��%�-�-�5�-�1�1�1��s�4Bc�,�eZdZUded<ded<ded<y)�_Frame�Image.Imager�z tuple[int, int, int, int] | None�bbox�dict[str, Any]r�N)rrr�__annotations__r#r$r%r�r��s���O�
*�*��r$r�c	�
�|jjd�}|jjd|jjd��}g}d}d}d}tj|g|jjdg��D�]�}	tj|	�D�]�}
t|
j��}
|dk(rU|
jj�D]8\}}|dk(r�t|t�s�|jj||��:|jj�}
d|
jvr|
jd|
jd�t|
||
�}
t|ttf�r	|||
d<n"|� d|
jvr|
jd|
d<t|ttf�r|||
d<|dz
}d}|�ro|�rlt!||
�\}}|s0|
jd�r|djdxx|
dz
cc<��x|djjd�dk(r�|��|jjd|jjdd	��}t#|
|�}t%j&d
|
j(|�}|dj*j,}|�J�|j/||j0�t!||
�d}�n]|
jd��rK|
j0dk7�r;d|
vr-|
j,�J�	|
j,j3|
�|
d<d|
v�r|
j�}t%j&d
|j(|
d�}|j0d
k(r1|j7�\}}}}t9j:d�||||��}nh|j0d
k(rAt%j&d|j(�}|j=|j?��|}t9j:d�|��}|jA|tCjD|���nd}|
}|jGtI|xs|
||
��������tK|�dk(r.d|jvr|djd|jd<y|D]�}|j*}
|jLs/tO|
|j�D]}|jQ|��d}n;|sd|jd<|
jS|jL�}
|jLdd}tU||
||j���y#t4$rY��wxYw)Nrk�disposalr�
append_imagesr{rrfr)rrrrx�optimizer�rwc�t�|d|d|d|d|d|d�|d�|d�dzd�S)	Nr�r��r�g�b�aror�r#��argss r%�<lambda>z(_write_multiple_frames.<locals>.<lambda>�sb��_�T�)�_�$/�D��K�(3��U��,7�D��K��S�	�4��9�,M�t�TW�y�)*�)-�S�	�	%&�'*�
%*�%(�	."r$)rrrrryc�&�|d|ddzd�S)Nr�r�ror�r#r	s r%rz(_write_multiple_frames.<locals>.<lambda>�s��_�T�)�_�T�$�Z�#�=M�s�-Sr$)r�)�maskFr�T�include_color_table)+r�r�rE�	itertools�chainr�Iteratorr�rzr�r�r�r�r�r�r~r��_get_backgroundr
�newr�r�rJr�r��_new_color_indexr��splitr�lambda_eval�putdatar�r�r�invertr�r�r6r�r�r��crop�_write_frame_data)r�r.rJrkr�	im_frames�previous_im�frame_count�
background_im�
imSequencer�r�r�r��
diff_framer�r�rrB�
first_paletter�rrrrr
�delta_l�
frame_datar1�offsets                              r%�_write_multiple_framesr%�s����~�~�!�!�*�-�H��~�~�!�!�*�b�g�g�k�k�*�.E�F�H� �I�&*�K��K��M��o�o�r�d�B�N�N�,>�,>��PR�,S�T�
�%�.�.�z�:�H�&�x�}�}��7�H��a��$�M�M�/�/�1�D�A�q��N�*� �!�!�S�)����1�1�!�Q�7�	2��.�.�-�-�/�K�����.��&�&�~�x�}�}�^�7T�U�)�(�G�[�I�H��(�T�5�M�2�*2�;�*?��J�'��!�j�H�M�M�&A�*2�-�-�
�*C��J�'��(�T�5�M�2�*2�;�*?��J�'��1��K��J��[�&�{�H�=���t��"���z�2�!�"�
�1�1�*�=��Z�AX�X�=���R�=�,�,�0�0��<��A�$�,� "��� 2� 2�*�B�G�G�K�K��	�,R�!��&5�X�u�%E�
�(-�	�	�#�x�}�}�j�(Q�
�(1�!����(?�(?�
�,�8�8�8�%�0�0��
�@R�@R�S�#�M�8�<�Q�?�D� �_�_�Z�0�X�]�]�c�5I�%�[�8�'�/�/�;�;�;�!� (� 0� 0� A� A�(� K�(��7�
&��4�%-�]�]�_�
�$�y�y��e�j�j�+�n�:U�V�� �:�:��/�).����J�A�q�!�Q�#,�#8�#8�	!"�#$�"#�"#�"#�$�D�" %�z�z�S�0�*/�)�)�C����*D�� '����
�
�� @�(/��#,�#8�#8� S�#(�$�D�#�(�(��H�O�O�D�4I�(�J���"�K����V�J�$:�(�D�+�N�O�o;�U�t�9�~�������'�)2�1��)A�)A�*�)M�B�N�N�:�&���
��=�=�����'��*�2H�2H�I�������J��F��@D�
�&�&�'<�=��}�}�Z�_�_�5�H��_�_�R�a�(�F��"�h��
�0F�0F�G� ���{ *�!� �!�s� U�	U�Uc�"�t|||d��y)NT)�save_all)r�)r�r.�filenames   r%�	_save_allr)s��	�"�b�(�T�*r$Fc�x�d|jvsd|jvr6|jjd|jjd��}nd}|jjdd�|r
t	|||�s
t|||�|j
d�t|d�r|j�yy)NrJrTrh�flush)	r�rEr�r�r%r�r��hasattrr+)r�r.r(r'rJs     r%r�r�	s����B�N�N�"�i�2�7�7�&:��.�.�$�$�Y������I�0F�G����
���!�!�*�d�3��1�"�b�'�B��B��G�,��H�H�T�N��r�7��
���
�r$c�r�|jjdd�}t|j�dkrd}|S)Nr�r�r)r�r��minr�)r�r�s  r%r�r�s5�����"�"�;��2�I��2�7�7�|�b���	��r$c��	|jd}d|jvrt|jddz�}nd}t|jjdd��}|�|dk7s|rk|�dnd}||dzz}|j	dtd	�ztd
�zt|�zt
|�zt|xsd�ztd�z�|jjd�}|r"t|�}	t|	�}
|
r
|dz}||
z}|j	d
t
|d�zt
|d�zt
|jd�zt
|jd�zt|�z�|r
r|j	t	��|j	td��y#t$rd}Y���wxYw)Nr{rkr>rrrrrirjrurr@rsr=)r��KeyErrorr�r�r�r�o16�_get_palette_bytes�_get_color_table_sizer��_get_header_palette)r.r�r$rQr{rkr�packed_flagrr��color_table_sizes           r%r�r�&s�����~�~�n�5���R�^�^�#��r�~�~�j�1�B�6�7�����2�>�>�%�%�j�!�4�5�H���8�q�=�H�'�3�a����x�1�}�$��
������g�
���e�
���o�
��(�m�	
�
��"��#�
$���e�

�	
��.�.�,�,�-B�C���*�2�.�
�0��?����C�K�E��,�,�E��H�H��

�f�Q�i�.�	�

�f�Q�i�.�	��b�g�g�a�j�/�	��b�g�g�a�j�/�		�

�U�)�	���/�
���$�]�3�4��H�H�R��U�O��U�����s�F;�;G
�	G
c�@�|j�}	t|d�5}|jdk7r)tjd|g|tj
��n�dd|g}dg}tj|tjtj
��}tj||j|tj
��}|j�J�|jj�|j�}	|	rtj|	|��|j�}	|	rtj|	|��ddd�	tj|�y#1swY� xYw#t$rYywxYw#	tj|�w#t$rYwwxYwxYw)N�wbrC�ppmtogif)�stdout�stderr�ppmquant�256)�stdinr;r<)�_dump�openr��
subprocess�
check_call�DEVNULL�Popen�PIPEr;�close�wait�CalledProcessError�os�unlink�OSError)
r�r.r(�tempfilerc�	quant_cmd�	togif_cmd�
quant_proc�
togif_proc�retcodes
          r%�_save_netpbmrSXsn���x�x�z�H�$�
�(�D�
!�Q��w�w�%���%�%���*�1�Z�=O�=O��(���9�	�'�L�	�'�-�-��j�o�o�j�>P�>P��
�(�-�-��$�+�+��%�-�-�	�
�"�(�(�4�4�4��!�!�'�'�)�$�/�/�+���$�7�7���K�K�$�/�/�+���$�7�7���K�K�="�@	��I�I�h��C"�
!��D�	��	��	��I�I�h����	��	�sY�E6�DE�<E6�E'�E$� E6�'	E3�2E3�6F�8F�
F�	F�F�F�Fc�d�|jdv�r!|�r|jd��rtxs|jdk(}|s|j|jzdkr�g}t|j
��D]\}}|s�	|j|��|st|�t|�k\r|S|j�J�t|jj�tj|jj�z}d|dz
j�z}t|�|dzkr|dkDr|Sy)aL
    Palette optimization is a potentially expensive operation.

    This function determines if the palette should be optimized using
    some heuristics, then returns the list of palette entries in use.

    :param im: Image object
    :param info: encoderinfo
    :returns: list of indexes of palette entries in use, or None
    )rxryrryiNrr)r�r��_FORCE_OPTIMIZE�width�heightr��	histogramr�r�r6rJr
�getmodebands�
bit_length)r�rE�optimiser�r8�count�num_palette_colors�current_palette_sizes        r%r�r��s��
�w�w�*���$�(�(�:�*>�#�4�b�g�g��n���r�x�x�"�)�)�+�i�7�"$��%�b�l�l�n�5���5��'�.�.�q�1�6��3�2�3�s�;N�7O�O�*�*��:�:�)�)�)�!$�R�Z�Z�%7�%7�!8�E�<N�<N��
�
���=�"��$%�);�a�)?�(K�(K�(M�#M� ��'�(�,@�A�,E�E�(�1�,�*�*�r$c��|syt|�dkrytjtjt|�dzd��dz
S)Nrrtrr4r)r6�math�ceil�log)r�s r%r4r4�sA����	�]�	�a�	���y�y����#�m�"4��"9�1�=�>��B�Br$c�v�t|�}d|zt|�dzz
}|dkDr|td�dz|zz
}|S)z�
    Returns the palette, null padded to the next power of 2 (*3) bytes
    suitable for direct inclusion in the GIF header

    :param palette_bytes: Unpadded palette bytes, in RGBRGB form
    :returns: Null padded palette
    rr4r)r4r6r)r�r7�actual_target_size_diffs   r%r5r5�sR��-�]�;�� !�$4�4��M�8J�a�8O�O����"���A����%<�<�<�
��r$c����|jsyt|jj��|jjdk(r/dj�fd�t	t��dz�D����S)z�
    Gets the palette for inclusion in the gif header

    :param im: Image object
    :returns: Bytes, len<=768 suitable for inclusion in gif header
    r$rwc3�:�K�|]}�|dz|dzdz���y�w)rur4Nr#)r�r8rJs  �r%r�z%_get_palette_bytes.<locals>.<genexpr>�s'�����X�?W�!�7�1�q�5�1�q�5�1�9�5�?W�s�r4)rJr�r��joinr5r6)r�rJs @r%r3r3�s[����:�:���B�J�J�&�&�'�G�	�z�z���&� ��(�(�X�u�S��\�UV�EV�?W�X�X���Nr$c���d}|r?t|t�r-|j�J�	|jj||�}|S|}|S#t$r}t|�dvr�Yd}~|Sd}~wwxYw)Nr)z$cannot allocate more than 256 colorsz/cannot add non-opaque RGBA color to RGB palette)r�r~rJ�getcolorr�r�)r��info_backgroundrBrds    r%rr�s����J���o�u�-��:�:�)�)�)�

��Z�Z�0�0��"�E�
���)�J�����
��q�6�"�������
�s�A�	A(�A#�#A(c��d}|jjd�dk(s9|r9d|vs3|jd��"|jd�s|jd�rd}t||jd��}t|�}t	|�}d	|zt|jd
�zt|jd�zt|dz�t|�td
�zt|�g}|jd��_|jd
td�ztd�zdztd�ztd�zt|d�ztd
�z�|jd�r�d
td�z}|d}t|t�r|j�}td
t|�d�D]$}	||	|	dz}
|tt|
��|
zz
}�&|td
�z
}|j|�|S)z2Return a list of strings representing a GIF headers87ar<s89ar{rrrkrgrBsGIFrrr@rirorArqr4rm)rEr�rr3r4r2r�rr5r�r�r��encoder5r6)r�rEr<rBr�r7�header�
comment_blockrgr8�subblocks           r%r�r�s���G�	�w�w�{�{�9���'���d�"��x�x���+��x�x�
�#��x�x�	�"��� ��T�X�X�l�%;�<�J�&�r�*�M�,�]�;��	�
�	�

�b�g�g�a�j�/�	��b�g�g�a�j�/�	�	��c�!�"�
�:���A����M�*��F��x�x���#��
�
����g�
���f�
��
���e�	
�
��e�
��$�v�,��

 ���e�
�		
��x�x�	���r�#�w��
��y�/���g�s�#��n�n�&�G��q�#�g�,��,�A��q�1�s�7�+�H��R��H�
�.��9�9�M�-�	��A���
��
�
�m�$��Mr$c��	||_t|||d�tj||tjdd|j
zdt|j�g�|jd�|`y#|`wxYw)Nrr�r�r�)	r�r�rr�r�r�r�r�r�)r.r�r$�paramss    r%rrBsr��!�%���	�B��&�!�4������
�_�_�U�F�X�]�]�$:�A�w�x�}�}�?U�
V�W�	
�	������ ��H� �s�A2A7�7A;c���|�i}t||�}d|vr d|jvr|jd|d<t|||�}|j|_|j|_t||�}||fS)a
    Legacy Method to get Gif data from image.

    Warning:: May modify image data.

    :param im: Image object
    :param palette: bytes object containing the source palette, or ....
    :param info: encoderinfo
    :returns: tuple of(list of header items, optimized palette)

    rB)r�rEr�rJr�r�)r�rJrEr��im_modrms      r%�	getheaderrt]s}���|���'��D�1���4��L�B�G�G�$;��W�W�\�2��\��
��G�T�
2�F����B�J��I�I�B�E�
��D�
)�F��&�&�&r$c��ddlm}Gd�d|�}|j�|�}t||||�|jS)a�
    Legacy Method

    Return a list of strings representing this image.
    The first string is a local image header, the rest contains
    encoded image data.

    To specify duration, add the time in milliseconds,
    e.g. ``getdata(im_frame, duration=1000)``

    :param im: Image object
    :param offset: Tuple of (x, y) pixels. Defaults to (0, 0)
    :param \**params: e.g. duration or other encoder info parameters
    :returns: List of bytes containing GIF encoded frame data

    r)�BytesIOc��eZdZgZdd�Zy)�getdata.<locals>.Collectorc�N�|jj|�t|�Sr�)r2r�r6)r0r2s  r%r�z getdata.<locals>.Collector.write�s���I�I���T�"��t�9�r$N)r2rr�r�)rrrr2r�r#r$r%�	Collectorrx�s����	r$rz)�iorvr�rr2)r�r$rqrvrzr.s      r%r�r�{s<��&��G���G�G�I�	��B��b�"�f�f�-�
�7�7�Nr$z.gifz	image/gif)r(r�r�r�)r�r�r�r�)r�r�rJ�_Palette | NonerEr�r�r�)r�r�r.�	IO[bytes]rJr|r�r�)r�r�r�r�r�z4tuple[Image.Image, tuple[int, int, int, int] | None])r�r�r.r}rJr|r�r�)r�r�r.r}r(�str | bytesr�r�)F)
r�r�r.r}r(r~r'r�r�r�)r�r�r�r�)
r.r}r�r�r$�tuple[int, int]rQr�r�r�)r�r�rEr�r�zlist[int] | None)r�r�r�r�)r�r�r�r�)r�r�r�r�)r�r�rjz=int | tuple[int, int, int] | tuple[int, int, int, int] | Noner�r�)r�r�rEr�r��list[bytes])
r.r}r�r�r$rrqr�r�r�)NN)r�r�rJr|rEzdict[str, Any] | Noner�z$tuple[list[bytes], list[int] | None])r�)r�r�r$rrqrr�r�)H�
__future__rrr`rJrB�enumr�	functoolsr�typingrrrr	r
r�r
rrrrrr�_binaryrrFrrr2r�_typingrrr r�r)r+r�r�r�r�r�r��_Paletter�r�r�r�r%r)r�r�r�rSrUr�r4r5r3rr�rrtr��
register_openr��
register_save�register_save_all�register_extension�
register_mimer#r$r%�<module>r�s
��4#���	���%�E�E����"��!�����g��#�2�2��0�^�9�&�&�^�J
�#�C�
(���4��	�4��9�l�.G�.G�G�H��D��D�-�D�5C�D��D�N�������
�	�8
2�
�
2�$/�
2�9�
2� �Z� �y��y�"�y�-<�y�	�y�x+�
MR����"��.9��EI��	��&�/��/�"�/�,;�/�DG�/�	�/�d-�d��-�`C��$
� ���R��	��6;�|!��!��!�
�!�
�	!�

�!�8UY�'��'�-�'�<Q�'�)�'�>06�"��"�,�"�AD�"��"�P����L�'�'��w�?�����L�'�'��/������+�+�Y�7������,�,�f�5�����L�'�'��5r$

Sindbad File Manager Version 1.0, Coded By Sindbad EG ~ The Terrorists