Team Ai
Datasetpublic

codekingpro/portable-devtools

sourceHugging Faceupdated 5mo agoView on Hugging Face
1likes15kdownloads
GifImagePlugin.cpython-313.pyc282 linesDownload Raw Back to __pycache__
1�

2v�jL���4�SSKJr SSKrSSKrSSKrSSKrSSKJr SSKJ	r	 SSK3JrJrJ
r
 SSKJrJrJrJrJrJrJr SSKJr SS	KJr SS4KJr SSKJr Sr\(aSS
K5JrJ r  SSKJ!r! SSK"J#r# "SS\5r$\$RJr&S/Sjr'"SS\R"5r(SSSS.r)S0Sjr*\+\,-\-\.-\R(-r/S1Sjr0S2Sjr1S3Sjr2"SS\5r3S4Sjr4S5Sjr5S6S7S jjr6S8S!jr7S9S"jr8S5S#jr9Sr:S:S$jr;S;S%jr<S<S&jr=S=S'jr>S>S(jr?S?S)jr@S@S*jrASASBS+jjrBSCSDS,jjrC\R�"\(R�\(\'5 \R�"\(R�\65 \R�"\(R�\55 \R�"\(R�S-5 \R�"\(R�S.5 g)E�)�annotationsN)�IntEnum)�cached_property)�Any�6NamedTuple�cast�)�Image�7ImageChops�	ImageFile�	ImageMath�ImageOps�ImagePalette�
ImageSequence)�i16le)�o8)�o16le)�
DeferredErrorF)�IO�Literal)�_imaging)�Bufferc�$�\rSrSrSrSrSrSrSrg)�LoadingStrategy�:z.. versionadded:: 9.1.0rr	��N)	�__name__�8__module__�__qualname__�__firstlineno__�__doc__�RGB_AFTER_FIRST� RGB_AFTER_DIFFERENT_PALETTE_ONLY�9RGB_ALWAYS�__static_attributes__r��XD:\code\apps\devtools\python\user_packages\Python313\site-packages\PIL/GifImagePlugin.pyrr:s��!��O�'(�$��Jr'rc�$�URS5$)N)sGIF87asGIF89a)�10startswith)�prefixs r(�_acceptr,Is�����3�4�4r'c�^�\rSrSrSrSrSrSrSSjrSSjr	SSjr11\SS	j5r\
SS12j5rSSjrSSSjjrSU4S
jjrSSjrSSjrSrU=r$)�GifImageFile�R�GIFzCompuserve GIFFNc��URceURRS5nU(a(US(aURRUS5$g)Nr	r)�fp�read)�self�ss  r(�data�GifImageFile.dataYsF���w�w�"�"�"��G�G�L�L��O����1���7�7�<�<��!��%�%�r'c��[S[U5S5H,nUS-Xs=:XaXS-s=:XaXS-:XaM( g  g g)Nr�r	rTF)�range�len)r4�p�is   r(�_is_palette_needed�GifImageFile._is_palette_needed`sM���q�#�a�&�!�$�A���F�a�d�:�a�A��h�:�!��E�(�:��;��%�r'c��URceURRS5n[U5(d
Sn[U5eUSSURS'[US5[US54UlUSnUS-S-nUS	-(akUS13URS'URRSU-5nURU5(a%[R"S
U5nU=Ul14UlURUlURR5UlSUlUR!S5 g)N�
znot a GIF file��version��15�r	���16backgroundr9�RGBr)r2r3r,�SyntaxError�info�i16�_sizer>r�raw�global_palette�palette�_fp�tell�_GifImageFile__rewind�	_n_frames�_seek)r4r5�msg�flags�bitsr<rQs       r(�_open�GifImageFile._openfs���w�w�"�"�"��G�G�L�L�����q�z�z�"�C��c�"�"� ��!�u��	�	�)����A�Y��A�q�	�)��17��"�����	�Q����3�;�&'��e�D�I�I�l�#������Q�$�Y�'�A��&�&�q�)�)�&�*�*�5�!�4��5<�<��#�d�l��7�7����������
�%)����18�19�1�
r'c��URc7UR5nURUR5S-S5 M%UR$![a UR5S-UlOf=fUR	U5 NF)Nr	F�rUrSrV�EOFError�seek)r4�currents  r(�n_frames�GifImageFile.n_frames�sv���>�>�!��i�i�k�G�
1���J�J�t�y�y�{�Q���6��20�~�~����
1�!%����q����
1���I�I�g�s�&A�"A6�5A6c���URbURS:g$UR5nU(agURSS5 SnUR	U5 U$![a SnN!f=f)Nr	TFr])r4r`�is_animateds   r(rd�GifImageFile.is_animated�sn���>�>�%��>�>�Q�&�&��)�)�+����	 ��J�J�q�%� ��K�	
�	�	�'�����	�	 ��K�	 �s�A�A,�+A,c�d�URU5(dgXR:aSUlURS5 URn[	URS-US-5HnURU5 M g![21a$nUR
U5 Sn[U5UeSnAff=f)Nrr	�no more images in GIF file)�_seek_check�_GifImageFile__frame�_imrVr:r^r_)r4�frame�22last_frame�f�erWs      r(r_�GifImageFile.seek�s�������&�&���<�<���D�H��J�J�q�M��\�\�23�	'��4�<�<�!�+�U�Q�Y�7���24�25�1�
�8���	'��I�I�j�!�.�C��3�-�Q�&��	'�s�4B�26B/�B*�*B/c�h^�[TR[5(aTRReUS:Xa_STlSTlSTlTRRTR5 STl	STR;a
TRS	O(TR(aU(aTR5 UTRS-:waSU3n[U5eTRTlTR(aYTRRTR5 TR5(aTR5(aMSTlTRR!S5nU(aUS:Xa
Sn[#U5eSn0nSnSnSn	U(dTRR!S5nU(aUS:XaGOUS:XGa�TRR!S5nTR5n27USS	:XaBU28b?U29SnUS-(aU30S31n[%U32S5S-US'S
U-nUS-	nU(aUTl	O�USS:XaESn
U33(aX�-
n
TR5n34U35(aMSU;aUS==SU
--
ss'OX�S'SnM�USS:Xa�US:Xa�U36b}U37TRR'54US'U38R)S5(aHTR5n39U40(a1[+U415S42:�a"U43SS:Xa[%U44S5TRS'TR5(aTR5(aMGO�US:XGa�TRR!S5n[%US5[%US5p�U[%US5-U[%US5-nnUTR,S:�dUTR,S:�a^U(aW[/UTR,S5[/UTR,S54Tl[2R4"TR05 X�UU4n	USnUS-S:gnUS-(aVUS-S-nTRR!S45U-5nTR7U5(a[8R:"SU5nOSnTRR!S5SnTRR'5TlOSnGMJUc
S n[#U5eUTlU(dg/TlTR46(a0TR<R?TR47TR@5 UbUOTRBTl"UTl#US:Xa�TRD(a-[H[JRL:Xa
UbS!OSTl'OS"Tl'OS#Tl'U(a	UTl(GO-TRB(aSS$K)J)n U"TRB5Tl(O�STl(O�TRTS":Xa�[H[JRV:wdU(a�S%TR;awTR<RYTRS%S5 TR<R[S![2R\R^5TlS!Tl'TRS%	O@STl'TR<R[S[2R\R^5TlS,U4S&jjnSTlU	Tl TR@(Ga�TRS:�Ga�TRS:Xa�TR@up�nnUU-48UU-494n[2R4"U5 S"nTRRaS%U5nUbTRTS';a
S!nU"U5S(-nO6TRRaS)S5nTRTS';a50SnU"U5n[2RbReUUU5TlO�TRfb,TRiTR<TR@5TlOzUbwTR@up�nnUU-51UU-524n[2R4"U5 S"nUnTRTS';a
S!nU"U5S(-n[2RbReUUU5TlUbuSnUb@US:Xa([H[JRL:waUTRS%'OTRTS';aUn[lRn"S*WWWW4TRWUU45/TlURaS5(aUSTRS'S+H<nUU;aUUTRU'MUTR;dM/TRU	M> g![ja N�f=f)-Nr������commentr	zcannot seek to frame �;rg�!��r9rE�duration�r��r'�53���	extension�NETSCAPE2.0�loop�,�	�rBrD�@rGrFrJFzimage not found in GIF frame�RGBA�P�L)�copy�transparencyc	�>�TR(avUS-S-[TRR5:�aSn[[[54[55[564[	TRRUS-US-S-55$XU4$)Nr9r)�_frame_paletter;rQr�tuple�int)�colorr4s �r(�_rgb� GifImageFile._seek.<locals>._rgbas�����"�"��1�9�q�=�3�t�':�':�'B�'B�#C�C��E���#�s�C�-�(��$�-�-�5�5�e�a�i�%�!�)�a�-�P�Q���57�e�,�,r'�rJr�)rrI�gif)rvr{)r�r��returnztuple[int, int, int])8�58isinstancerRr�ex�_GifImageFile__offset�disposerir_rT�disposal_methodrL�tile�load�59ValueErrorr2r6r3r^rMrSr*r;�size�maxrNr60�_decompression_bomb_checkr>rrO�im�paste�dispose_extentrPr��_frame_transparency�LOADING_STRATEGYrr%�_moderQr��moder$�putpalettealpha�convert�Dither�FLOYDSTEINBERG�get�core�fillrj�_crop�AttributeErrorr�_Tile)r4rk�update_imagerWr5rQrL�frame_transparency�	interlace�frame_dispose_extent�blockrX�dispose_bitsrr�x0�y0�x1�y1rYr<r�r��dispose_size�dispose_moder�r��ks`                          r(rV�GifImageFile._seek�s1����d�h�h�
�.�.��(�(�+�+���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�#�610<��,���q�T�S�[�"�G� ��(�� $�	�	��� �%�!�D�(��Y��5�7�?�:��*1�Y���A���q�T�S�[�U�a�Z�E�4E�).�t�w�w�|�|�~�(=�D��%��'�'��7�7� $�	�	��� �S��Z�1�_��q��Q��03�E�1�
�D�I�I�f�-��i�i�k�k���i�i�k�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�?�')�r�2�~�$��!���"�R�Z�A�-�	��3�;�!�A�I��?�D������Q�$�Y�/�A��.�.�q�1�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� ��62��&����$�$�%�#�D�$7�$7�8���#����y�y�C��$��(X�(X�X��%����2����/�/��	�	�.�0I�1�M�"&�'�'�/�/�&�%�,�,�:U�:U�"V���%+��63� �I�I�n�5�%*��64�"&�'�'�/�/�%����9T�9T�"U���		-����@T�������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�(*�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 �2Cf$�8f$�A:f$�$65f1�0f1c�p>�UR(aSOSnSUlURS:XaGURb9[R66R
XRUR5UlO�URS;a�URUlUR(ay[R67R
SURUR=(d S5UlURR"S/URR5Q76 OSUlUR(d�URb�URURR:wa�[R68R
URRUR5nUR(a+UR"S/URR5Q76 URURSURR-5 X lXlSUl[TU]A5 g)Nr�r�rr�rJ�rr)r��_prev_imrir�r69r�r�r�r�r��70putpalette�getdatarjr�r��super�load_prepare)r4�	temp_mode�expanded_im�	__class__s   �r(r��GifImageFile.load_prepare�sx����.�.�C�C�	���
��<�<�1���'�'�3��*�*�/�/��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������'<�=�!�G��71�"���
���r'c�^�URS:Xa�URS:Xa�[[R:Xa�UR72b.URRUR73S5 SUlOSUlURRUR[RR5UlgUR(dgURURR:wa�UR74b+[RR!SUR5nOf[RR!SUR5nUR#SSURR%55 URS5nUR'URSURR-5 Xl
URceUR75byURS:Xa'URR)SUR765nO]URRUR77S5 URRS5nOURRS5nUR*ceUR-X R*5nURUlURRUlURS;a'URR'X R*U5 gURR'X R*5 g)	Nrr�r�rJr�r��LA)r�r�)rir�r�rr%r�r�r�r�r�r78r�r�r�r�r�r�r��79getpaletter��convert_transparentr�r�)r4r��frame_ims   r(�load_end�GifImageFile.load_end�s2���<�<�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�'�M��=�=�,�,�,��#�#�/��y�y�C���7�7�6�6�t�T�=U�=U�V�����'�'��(@�(@�!�D��7�7�?�?�6�2���w�w���u�-�H��"�"�.�.�.��:�:�h�(;�(;�<���-�-����W�W�\�\��80��=�=�N�*��G�G�M�M�(�$7�$7��B��G�G�M�M�(�$7�$7�8r'c��UR$�N)ri)r4s r(rS�GifImageFile.tell�s���|�|�r')�__frame�__offset�__rewindrRr�r�rjr�rUr�rNr�r�r�r2rPr�rQr�)r�zbytes | None)r<�bytesr��bool)r��None)r�r�)r�r�)rkr�r�r�)T)rkr�r�r�r�r�)rrr r!�format�format_description�!_close_exclusive_fp_after_loadingrPr6r>rZ�propertyrarrdr_rVr�r�rSr&�
__classcell__)r�s@r(r.r.Rsq���
�F�)��(-�%��N����6�	��	�����"'� C!�J�6(9�T�r'r.r�r�)�1r�r�c���UR[;aUR5 U$[R"UR5S:Xa�URS[RRS9nURceURRS:XaOURRH5nUSS:XdMURRUURS' U$ U$URS5$)	z�81Takes an image (or frame), returns an image in a mode that is appropriate82for saving in a Gif.83 84It may return the original image, or it may return an image converted to85palette or 'L' mode.86 87:param im: Image object88:returns: Image object89rJr��rQr�r9rr�r�)r��RAWMODEr�r90�getmodebaser��Palette�ADAPTIVErQ�colorsrL)r��rgbas  r(�_normalize_moder�s���91�w�w�'��92���	��	�������!�U�*�
�Z�Z��U�]�]�%;�%;�Z�
<���z�z�%�%�%�
�:�:�?�?�f�$��93�94�)�)����7�a�<�.0�j�j�.?�.?��.E�B�G�G�N�+���	�	*��	�
�:�:�c�?�r'c��SnU(ab[U[[[45(a[USS5n[U[R5(a[UR955nURS:Xa)U(d!URS5nUce[U5nO<U(d[S[S555n[R"SUS9UlUceU(a�/nUR96ce[S[U5S5HPn[X6US-5nUR97RRU5nX�;aSnURU5 MR [U5H1uphUbM98[[U55Hn	X�;dM99X�U' M/ M3 /n100UHnUceU101RU5 M URU1025nOA[!X5nUb3URX�5nS	U;aUR#US	5US	'U$U$UR103ceX0R104lU$![$a US		U$f=f)105aP106Normalizes the palette for image.107  - Sets the palette to the incoming palette, if provided.108  - Ensures that there's a palette for L mode images109  - Optimizes the palette if necessary/desired.110 111:param im: Image object112:param palette: bytes object containing the source palette, or ....113:param info: encoderinfo114:returns: Image object115Nir�c3�*# �UH	oS-v� M g7f)r9Nr)�.0r=s  r(�	<genexpr>�%_normalize_palette.<locals>.<genexpr>>s���&B�z�!�A�v�z�s�rJr�rr9r�)r�r��	bytearray�listrrQr�r�r:r;r�r�r��append�	enumerate�
remap_palette�
_get_optimize�indexr�)r�rQrL�source_palette�116im_palette�used_palette_colorsr=�source_colorr��j�dest_map�optimized_palette_colorss            r(�_normalize_paletter�!s@���N���g��y�$�7�8�8�&�w�t��}�5�N��g�|�8�8�9�9�&�w���7�N�	�w�w�#�~�����t�,�J��)�)�)�&�z�2�N���&�&B�u�S�z�&B�B�N�!�.�.�u�n�M��117��%�%�%��02���z�z�%�%�%��q�#�n�-�q�1�A� ��A��E�!:�;�L��J�J�%�%�)�)�,�7�E��+����&�&�u�-�2�"�"5�6�H�A��}��s�#6�7�8�A��3�12�A�.��9�7�!��(�E��$�$�$��O�O�E�"�)��
�
�h�
'��#0��#:� �#�/��!�!�":�K�B���%�-�+C�+I�+I��^�,�,�D��(�118�I�2�I�
�:�:�!�!�!�'�J�J��
�I��
"�-��^�,��I�-�s�H=�=
I�
Ic�r�[U5nURR5H7upE[U[5(dMUR119R
XE5 M9 [X2UR1205n[X0R1215HnURU5 M Sn[U5(aUS-n[XSU5 S[U54Ul[R"X1[R"SSUR -S["UR$5/5 URS5 g)Nrr�r�rDr��)r�rL�itemsr��str�encoderinfo�122setdefaultr��_get_global_header�write�
get_interlace�_write_local_header�
encoderconfigr�_saver�r�r�r�)r�r2rQ�im_outr��vr5rXs        r(�_write_single_framerhs���123�R�
 �F����!�!�#����a�����N�N�%�%�a�+�$� �����
@�F�
����
7��124�����8�
�E��R�����125������.��}�R�0�1�F��
�O�O��Y�_�_�U�F�R�W�W�,<�a�����AU�V�W���H�H�U�Or'c�8�X4Vs/sH4o"R(a[URR5OSPM6 nnUSUS:wa"URS5nURS5n[R"X5nXDRSS94$s snf)Nr'rr	r�F)�126alpha_only)rQr�r�r�subtract_modulo�getbbox)�base_im�im_framer��
palette_bytes�deltas     r(�_getbboxr�s���EL�CV��CV�R�Z�Z��b�j�j� � �!�S�8�CV����Q��=��+�+��#�#�F�+���/�/�&�)���&�&�x�9�E��-�-�5�-�1�1�1��s�;Bc�4�\rSrSr%S\S'S\S'S\S'Srg	)127�_Framei��Image.Imager�z tuple[int, int, int, int] | None�bbox�dict[str, Any]r�rN)rrr r!�__annotations__r&rr'r(rr�s���O�128*�*��r'rc129��URRS5nURRSURRS55n/nSnSnSn[R"U/URRS/55GH3n	[130R"U	5GHn131[U132R55n133US:Xa]U134RR5H?up�US:XaM
[U[5(dM$URRX�5 MA URR5n
SU135R;aU
RSU136RS5 [X�U
5n137[U[[45(aX7U
S'O%Uc"SU138R;aU139RSU
S'[U[[45(aXGU
S'US-
nSnU(Ga�U(Ga�[!Xj5unnU(d6U
RS5(aUSRS==U
S-
ss'GM�USRRS5S:Xa�URRSURRS55nUb{Uch[#U140U5n[$R&"S	U141R(U5nUSR*R,nUceUR/UUR05 [!X�5SnGOwS142U143R(-nGOfU
RS5(GaLU144R0S:wGa;SU
;a.U145R,ceU146R,R3U1475U
S'SU
;GaU148R5n[$R&"S	UR(U
S5nUR0S
:Xa/UR75unnnn[8R:"SUUUUS9nOhUR0S	:XaB[$R&"SUR(5nUR=UR?55 Un[8R:"SUS9nURAU[BRD"U5S9 OSnU149nURG[IU=(d U150UU
55 GM GM6 [KU5S:Xa0SUR;aUSRSURS'gUH�nUR*n151URL(d1[OU152UR5HnURQU5 M S153nO]U(dSURS'URLS154U155R(-:waU156RSURL5n157URLSSn[UXUUR5 M� g![4a GNSf=f)Nrv�disposalr�
append_imagesr�r	rqrr�r��optimizer�r�c�t�US"US"US"US"USUS5US5US5S-S5$)	Nr�r��r�g�b�arzr�r��argss r(�<lambda>�(_write_multiple_frames.<locals>.<lambda>�sZ��T�)�_�$(��K�(,�U��,0��K��S�	�4��9�,M�t�TW�y�)*�)-�S�	�	%&�'*�
%*�%(�	."r')rrrrr�c�&�US"USS-S5$)Nr�r�rzr�rr s r(r"r#�s��T�)�_�T�$�Z�#�=M�s�-Sr')r�)�maskFT�include_color_table)+r�r�rL�	itertools�chainr�Iteratorr�r�r�r�r�r�r�r�r�r�_get_backgroundr158�newr�r�rQr�r��_new_color_indexr��splitr
�lambda_eval�putdata�get_flattened_datar�r�invertr�rr;rr�r�crop�_write_frame_data)r�r2rQrvr�	im_frames�previous_im�frame_count�
background_im�159imSequencer
r�rr��160diff_framerrr�rI�
first_paletter�rrrrr%�delta_l�161frame_datar5�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�162�%�.�.�z�:�H�&�x�}�}��7�H��a��$�M�M�/�/�1�D�A��N�*� �!�!�S�)�)����1�1�!�7�	2��.�.�-�-�/�K�����.��&�&�~�x�}�}�^�7T�U�)�(�[�I�H��(�T�5�M�2�2�*2�*?��J�'��!�j�H�M�M�&A�*2�-�-�163�*C��J�'��(�T�5�M�2�2�*2�*?��J�'��1��K��J��[�&�{�=���t��"���z�2�2�!�"�
�1�1�*�=��Z�AX�X�=���R�=�,�,�0�0��<��A��N�N�.�.�&������N�(C��E��(�(�0�)8��5�)I�J�,1�I�I�c�8�=�=�*�,U�M�,5�a�L�O�O�,C�,C�M�#0�#<�<�#<�)�4�4�]�M�DV�DV�W�'�
�@��C��%��
�
�5�� �_�_�Z�0�0�X�]�]�c�5I�%�[�8�'�/�/�;�;�;�!� (� 0� 0� A� A�(� K�(��7�164&��4�%-�]�]�_�165�$�y�y��e�j�j�+�n�:U�V�� �:�:��/�).����J�A�q�!�Q�#,�#8�#8�	!"�#$�"#�"#�"#�$�D�" %�z�z�S�0�*/�)�)�C����*D�� '����0H�0H�0J� K�(/��#,�#8�#8� S�#(�$�D�#�(�(��H�O�O�D�4I�(�J����"�K����V�J�$:�(�D�+�N�O�y;�U�~�9�~�������'�)2�1��)A�)A�*�)M�B�N�N�:�&���166��=�=�����'��*�2H�2H�I�������J��F��@D�167�&�&�'<�=����&�8�=�=�"8�8�#�=�=����9���_�_�R�a�(�F��"��168�0F�0F�G� � ��} *�!� �!�s�*W�169W�Wc��[XUSS9 g)NT)�save_all)r)r�r2�filenames   r(�	_save_allrBs��	�"�(�T�*r'c��SUR;dSUR;a6URRSURRS55nOSnURRSS5 U(a[	XU5(d[XU5 UR
S5 [US5(aUR5 gg)NrQrTrs�flush)	r�rLr�r�r>rr�hasattrrD)r�r2rAr@rQs     r(rrs����B�N�N�"�i�2�7�7�&:��.�.�$�$�Y������I�0F�G����170���!�!�*�d�3��1�"�'�B�B��B�G�,��H�H�T�N��r�7���171���172�r'c�t�URRSS5n[UR5S:aSnU$)Nr�r	�r)r�r��minr�)r�r�s  r(rr0s5�����"�"�;��2�I��2�7�7�|�b���	��r'c���URSnSUR;a[URSS-5nOSn[URRSS55nUc
US:wdU(apUbSOSnXvS--nUR	S[S	5-[S1735-[U5-[
U5-[U=(d S5-[S5-5 URRS5nU(a&[U5n	[U	5n174U175(a	US-nX:-nUR	S
[
US5-[
US5-[
URS5-[
URS5-[U5-5 U(a!W176(aUR	[W	55 UR	[S55 g![a SnGN�f=f)Nr�rvrErrr	rrtrur�r&rGr~rD)r��KeyErrorr�r�rr�o16�_get_palette_bytes�_get_color_table_sizer��_get_header_palette)r2r�r=rXr�rvr�packed_flagr&r�color_table_sizes           r(rr:s�����~�~�n�5���R�^�^�#��r�~�~�j�1�B�6�7�����2�>�>�%�%�j�!�4�5�H���8�q�=�H�'�3�a����1�}�$��177������g�
���e�
���o�
��(�m�	
�178��"��#�
$���e�

�	179��.�.�,�,�-B�C���*�2�.�
�0��?����C�K�E��,�E��H�H��180
�f�Q�i�.�	�181
�f�Q�i�.�	��b�g�g�a�j�/�	��b�g�g�a�j�/�		�182
�U�)�	���/�183���$�]�3�4��H�H�R��U�O��U�����s�G�G,�+G,c�^�UR5n[US5nURS:wa'[R"SU/U[R184S9 O�SSU/nS/n[R"U[R[R185S9n[R"UURU[R186S9nURceURR5 UR5n	U	(a[R"X�5eUR5n	U	(a[R"X�5eSSS5 [R"U5 g!,(df   N&=f![a gf=f![R"U5 f![a ff=f=f)N�wbrJ�ppmtogif)�stdout�stderr�ppmquant�256)�stdinrTrU)�_dump�openr��187subprocess�188check_call�DEVNULL�Popen�PIPErT�close�wait�CalledProcessError�os�unlink�OSError)189r�r2rA�tempfilerm�	quant_cmd�	togif_cmd�190quant_proc�191togif_proc�retcodes192          r(�_save_netpbmrllsj���x�x�z�H�$�
�(�D�
!�Q��w�w�%���%�%���*�1�Z�=O�=O��(���9�	�'�L�	�'�-�-��j�o�o�j�>P�>P��193�(�-�-��$�+�+��%�-�-�	�194�"�(�(�4�4�4��!�!�'�'�)�$�/�/�+���$�7�7��K�K�$�/�/�+���$�7�7��K�K�="�@	��I�I�h��C"�
!��D�	��	��	��I�I�h����	��	�sY�F�D$E"�F�E3�"195E0�,F�3196F�?F�F,�F�F,�197F)�&F,�(F)�)F,c���URS;GaiU(GaaURS5(GaJURS:wGa9URS:wGa([=(d URS:HnU(dURUR-S:a�/n[UR
55HupEU(dMURU5 M! U(d[U5[U5:�aU$URce[URR5[R"URR5-nSUS-198R5-n[U5US-::aUS:�aU$g)	a0199Palette optimization is a potentially expensive operation.200 201This function determines if the palette should be optimized using202some heuristics, then returns the list of palette entries in use.203 204:param im: Image object205:param info: encoderinfo206:returns: list of indexes of palette entries in use, or None207)r�r�rrr�iNr	r)r�r��width�height�_FORCE_OPTIMIZEr��	histogramr�r�r;rQr208�getmodebands�209bit_length)r�rL�optimiser�r=�count�num_palette_colors�current_palette_sizes        r(r�r��s6��	���:����H�H�Z� � ��H�H��M��I�I��N�#�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��210�211���=�"��$%�);�a�)?�(K�(K�(M�#M� ��'�(�,@�A�,E�E�(�1�,�*�*�r'c��U(dg[U5S:ag[R"[R"[U5S-S55S-212$)Nrrr	r9r)r;�math�ceil�log)rs r(rMrM�sA����	�]�	�a�	���y�y����#�m�"4��"9�1�=�>��B�Br'c�x�[U5nSU-[U5S--213nUS:�aU[S5S-U--
nU$)z�214Returns the palette, null padded to the next power of 2 (*3) bytes215suitable for direct inclusion in the GIF header216 217:param palette_bytes: Unpadded palette bytes, in RGBRGB form218:returns: Null padded palette219rr9r)rMr;r)rrP�actual_target_size_diffs   r(rNrN�sR��-�]�;�� !�$4�4��M�8J�a�8O�O����"���A����%<�<�<�
��r'c��^�UR(dg[URR5mURRS:Xa0SRU4Sj[	[T5S-555mT$)z�220Gets the palette for inclusion in the gif header221 222:param im: Image object223:returns: Bytes, len<=768 suitable for inclusion in gif header224r'r�c3�@># �UHnTUS-US-S-v� M g7f)r�r9Nr)r�r=rQs  �r(r��%_get_palette_bytes.<locals>.<genexpr>�s&����X�?W�!�7�1�q�5�1�q�5�1�9�5�?W�s�r9)rQr�r��joinr:r;)r�rQs @r(rLrL�s[����:�:���B�J�J�&�&�'�G�	�z�z���&� ��(�(�X�u�S��\�UV�EV�?W�X�X���Nr'c���SnU(aD[U[5(a-URceURRX5nU$UnU$![an[U5S;aeSnAU$SnAff=f)Nr)z$cannot allocate more than 256 colorsz/cannot add non-opaque RGBA color to RGB palette)r�r�rQ�getcolorr�r�)r��info_backgroundrIrns    r(r*r*s����J���o�u�-�-��:�:�)�)�)�225
��Z�Z�0�0��E�226���)�J�����
��q�6�"�������
�s�A�227A5�A0�0A5c�D�SnURRS5S:XdKU(aFSU;d>URS5c,URS5(dURS5(aSn[XRS55n[U5n[	U5nS	U-[URS2285-[URS5-[US-5[U5[S2295-[U5/nURS5b_URS
[S5-[S5-S-[S5-[S5-[US5-[S2305-5 URS5(a�S
[S5-nUSn[U[5(aUR5n[S231[U5S5H$n	X�U	S-n232U[[U23355U234--
nM& U[S2355-
nURU5 U$)z2Return a list of strings representing a GIF headers87arCs89ar�r}rvrrrIsGIFrr	rGrtrzrHr|r9rx)rLr�r*rLrMrKr�rrNr�r�r��encoder:r;)r�rLrCrIrrP�header�
comment_blockrrr=�subblocks           r(r�r�s���G�	�w�w�{�{�9���'���d�"��x�x���+��x�x�236�#�#��x�x�	�"�"��� ��X�X�l�%;�<�J�&�r�*�M�,�]�;��	�237�	�238
�b�g�g�a�j�/�	��b�g�g�a�j�/�	�	��c�!�"�239�:���A����M�*��F��x�x���#��
�
����g�
���f�
��
���e�	
�240��e�
��$�v�,��

 ���e�
�		241��x�x�	����r�#�w��
��y�/���g�s�#�#��n�n�&�G��q�#�g�,��,�A��1�s�7�+�H��R��H�
�.��9�9�M�-�	��A���
��
�
�m�$��Mr'c���X1l[XUS5 [R"UU[R"SSUR242-S[UR5/5 URS5 U?g!U?f=f)Nrr�r�r�)	r�rrrr�r�r�r�r)r2r
r=�paramss    r(r3r3\sn��!�%��	�B�&�!�4������
�_�_�U�F�X�]�]�$:�A�w�x�}�}�?U�
V�W�	243�	������ ��H� �s�A2A7�7A;c���Uc0n[X5nSU;a"SUR;aURSUS'[XU5nURUlURUl[X5nXS4$)a244Legacy Method to get Gif data from image.245 246Warning:: May modify image data.247 248:param im: Image object249:param palette: bytes object containing the source palette, or ....250:param info: encoderinfo251:returns: tuple of(list of header items, optimized palette)252 253rI)r�rLr�rQr�r�)r�rQrLr��im_modr�s      r(�	getheaderr�wst���|���'��1���4��L�B�G�G�$;��W�W�\�2��\��
��T�
2�F����B�J��I�I�B�E�
��
)�F��&�&r'c��SSKJn "SSU5nUR5 U"5n[XPX5 UR$)a�254Legacy Method255 256Return a list of strings representing this image.257The first string is a local image header, the rest contains258encoded image data.259 260To specify duration, add the time in milliseconds,261e.g. ``getdata(im_frame, duration=1000)``262 263:param im: Image object264:param offset: Tuple of (x, y) pixels. Defaults to (0, 0)265:param \**params: e.g. duration or other encoder info parameters266:returns: List of bytes containing GIF encoded frame data267 268r)�BytesIOc�"�\rSrSr/rSSjrSrg)�getdata.<locals>.Collectori�c�N�URRU5 [U5$r�)r6r�r;)r4r6s  r(r� getdata.<locals>.Collector.write�s���I�I���T�"��t�9�r'rN)r6rr�r�)rrr r!r6rr&rr'r(�	Collectorr��s����	r'r�)�ior�r�r3r6)r�r=r�r�r�r2s      r(r�r��s8��&��G���G�G�I�	��B��b�f�-�
�7�7�Nr'z.gifz	image/gif)r+r�r�r�)r�rr�r)r�rrQ�_Palette | NonerLrr�r)r�rr2�	IO[bytes]rQr�r�r�)rrr
rr�z4tuple[Image.Image, tuple[int, int, int, int] | None])r�rr2r�rQr�r�r�)r�rr2r�rA�str | bytesr�r�)F)269r�rr2r�rAr�r@r�r�r�)r�rr�r�)270r2r�r�rr=�tuple[int, int]rXr�r�r�)r�rrLrr�zlist[int] | None)rr�r�r�)rr�r�r�)r�rr�r�)r�rr�z=int | tuple[int, int, int] | tuple[int, int, int, int] | Noner�r�)r�rrLrr��list[bytes])271r2r�r
rr=r�r�rr�r�)NN)r�rrQr�rLzdict[str, Any] | Noner�z$tuple[list[bytes], list[int] | None])r�)r�rr=r�r�rr�r�)J�272__future__rr'ryrcr[�enumr�	functoolsr�typingrrr�r273rrr
rrr�_binaryrrMrrrK�_utilr�
TYPE_CHECKINGrrr�_typingrrr#r�r,r.r�r�r�r�r�r��_Paletter�rrrr>rBrrrrlrpr�rMrNrLr*r�r3r�r��
register_openr��
register_save�register_save_all�register_extension�
register_mimerr'r(�<module>r�s��4#���	���%�(�(����"��!� ��
��"����g��#�2�2��5�h�9�&�&�h�^
�#�C�274(���4�9��t�C�y�(�<�+D�+D�D��D��D�-�D�5C�D��D�N�������275�	�82762�
�2772�$/�2782�9�2792� �Z� ����"��-<��	��D+�280MR����"��.9��EI��	��&�/��/�"�/�,;�/�DG�/�	�/�d-�d��3�lC��$
� ���R��	��6;�|!��!��!�
�!�
�	!�281282�!�8UY�'��'�-�'�<Q�'�)�'�>06�"��"�,�"�AD�"��"�P���L�'�'��w�?����L�'�'��/�����+�+�Y�7�����,�,�f�5����L�'�'��5r'
codekingpro/portable-devtools · Team Ai